Gibt es einen Mechanismus in Antlr die Lexer zu ermöglichen, während bestimmte Regeln nur ein Token übereinstimmen?

StackOverflow https://stackoverflow.com/questions/1620011

  •  06-07-2019
  •  | 
  •  

Frage

Ich möchte ein Stichwort zu meiner Sprache hinzuzufügen.

Dieses Schlüsselwort würde nur während einer bestimmten Parser Grammatikregel angepasst werden müssen.

Durch die Abwärtskompatibilität würde Ich mag dieses Schlüsselwort ermöglichen, weiterhin als Variablennamen verwendet werden, dh es kann durch die Lexer Regel angepasst werden, wenn bestimmt ein Zeichen für einen Variablennamen geeignet ist.

Der Lexer paßt die neue Regel, wenn es in der Datei gefunden wird.

Ist der geeignete Weg, um dies zu arbeiten, um die var_declaration Regel so zu modifizieren, dass sie entweder eine IDENT oder das neue STICHWORT Token entsprechen?

protected
modified_var_declaration:
     VAR (IDENT|KEYWORD);
;

Die entsprechenden Regeln sind:

IDENT   // matches variable names
options { testLiterals=true; }
    : ( '_' | 'a'..'z' | 'A'..'Z' ) ( '_' | 'a'..'z' | 'A'..'Z' | DIGIT )*
;

KEYWORD: // my new keyword
  "key"
;

Der Parser Regel eine Variable für die Erstellung ist:

protected
var_declaration:
     VAR IDENT;
;
War es hilfreich?

Lösung

Viele Sprachen haben kontextsensitive Keywords. Der erste Schritt, um sie zu der Handhabung ist das Hinzufügen einer neuen Parser-Regel ident einen Variablennamen darstellt. Verwenden Sie diese Regel in Ihrem Parser statt IDENT.

ident
    : IDENT
    | KEYWORD
    ;

Andere Tipps

Schauen Sie sich http://www.antlr.org/wiki/display /ANTLR3/1.+Lexer die sollten Ihnen helfen. Sie müssen geschärft und entschärft ein Flag, wenn „STICHWORT“ wird erlaubt sein, d.

KEYWORD : { keywordcontext }?=> "key";

hier der Trick Makel würde, wenn Sie ein Schlüsselwort erwarten können, die weniger als trivial sein könnten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top