2017-04-03 2 views
0

Warum kann ich SetText-Funktion nicht in Parser-Regeln verwenden?ANTLR4 setText-Funktion funktioniert nicht mit Parser-Regeln

Zum Beispiel:

normalClassDeclaration 
: classModifier* 'class' Identifier typeParameters? superclass? superinterfaces? classBody 
    { 
    $Identifier.setText("TEST"); 
    } 
; 

Wenn ich den Parser und Lexer mit dieser Grammatik erzeugen, der Parser kennt nicht die Funktion setText. Wenn ich dies in den Lexer Regeln zu tun, ist es kein Problem, und er wird bei jeder Kennung „TEST“

Identifier 
: JavaLetter JavaLetterOrDigit* 
{ 
setText("V"); 
} 
; 

Aber er sollte nur dann ändern, die Kennung, wenn seine eine Klasse/Funktion/Variablenbezeichner ändern.

Antwort

0

$Identifier ist vom Typ org.antlr.v4.runtime.Token. Es ist eine Schnittstelle, die nur Getter bereitstellt (z. B. getText()).

folgende funktioniert:

normalClassDeclaration 
: classModifier* 'class' Identifier typeParameters? superclass? superinterfaces? classBody 
    { 
    ((CommonToken)$Identifier).setText("TEST"); 
    } 
; 
+0

Danke. War sehr hilfreich. – vizero

+0

Sie sind willkommen – Yevgeniy