class Ripper

Ripper ist ein Ruby-Skript-Parser.

Sie können Informationen vom Parser im ereignisbasierten Stil erhalten. Informationen wie abstrakte Syntaxbäume oder einfache lexikalische Analyse des Ruby-Programms.

Verwendung

Ripper bietet eine einfache Schnittstelle, um Ihr Programm in einen symbolischen Ausdrucksbaum (oder S-Ausdruck) zu parsen.

Das Verständnis der Ausgabe des Parsers kann eine Herausforderung sein. Es wird empfohlen, PP zu verwenden, um die Ausgabe leserlich zu formatieren.

require 'ripper'
require 'pp'

pp Ripper.sexp('def hello(world) "Hello, #{world}!"; end')
  #=> [:program,
       [[:def,
         [:@ident, "hello", [1, 4]],
         [:paren,
          [:params, [[:@ident, "world", [1, 10]]], nil, nil, nil, nil, nil, nil]],
         [:bodystmt,
          [[:string_literal,
            [:string_content,
             [:@tstring_content, "Hello, ", [1, 18]],
             [:string_embexpr, [[:var_ref, [:@ident, "world", [1, 27]]]]],
             [:@tstring_content, "!", [1, 33]]]]],
          nil,
          nil,
          nil]]]]

Wie Sie im obigen Beispiel sehen können, beginnt der Ausdruck mit :program.

Von hier aus folgt eine Methodendefinition bei :def, gefolgt vom Bezeichner der Methode :@ident. Nach dem Bezeichner der Methode kommen die Klammern :paren und die Methodenparameter unter :params.

Als nächstes kommt der Methodenrumpf, beginnend bei :bodystmt (stmt steht für Statement), der die vollständige Definition der Methode enthält.

In unserem Fall geben wir einfach einen String zurück, daher haben wir als nächstes den Ausdruck :string_literal.

Innerhalb unseres :string_literal werden Sie zwei @tstring_content bemerken. Dies ist der literale Teil für Hello, und !. Zwischen den beiden @tstring_content-Anweisungen befindet sich ein :string_embexpr, wobei embexpr ein eingebetteter Ausdruck ist. Unser Ausdruck besteht aus einer lokalen Variablen, oder var_ref, mit dem Bezeichner (@ident) von world.

Ressourcen

Voraussetzungen

Lizenz

Ruby-Lizenz.