2017-04-03 2 views
0

Pourquoi ne puis-je pas utiliser la fonction setText dans les règles de l'analyseur?La fonction setText de ANTLR4 ne fonctionne pas avec les règles de l'analyseur

Par exemple:

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

Si je produis l'analyseur et lexer avec cette grammaire, l'analyseur ne connaît pas la fonction setText. Si je fais cela dans les règles de analyseurs lexicaux, il n'y a pas de problème et il est en train de changer chaque identifiant de « TEST »

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

Mais il ne devrait changer l'identifiant lorsque sa classe/fonction/identifiant variable.

Répondre

0

$Identifier est de type org.antlr.v4.runtime.Token. Il s'agit d'une interface fournissant uniquement getter (par exemple, getText()).

suivantes sont utilisables:

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

Merci. Était très utile. – vizero

+0

vous êtes les bienvenus – Yevgeniy