Я хочу распечатать значение токенов, вызываемых в синтаксическом анализаторе (возвращаемое сканером), однако для каждого из них отображается ноль.
Например, когда входной файл
tmp := X*X;
Эта грамматика должна печатать " tmp назначено " вместо "null назначено":
assignment ::= IDENTIFIER:i ASSIGNMENT math_expression SEMI
{: System.out.println(i + " assigned"); :}; // null assigned
Есть ли другой способ получить действительное значение (кроме написанного кода: D), или я должен сделать еще один шаг, кроме этого, чтобы добраться до них?
Части кода, которые могут понадобиться:
lexer.jflex
public Symbol symbol(String name, int code){
return symbolFactory.newSymbol(name, code,
new Location(yyline+1,yycolumn+1, yychar),
new Location(yyline+1,yycolumn+yylength(), yychar+yylength())
);
}
public Symbol symbol(String name, int code, String lexem){
return symbolFactory.newSymbol(name, code,
new Location(yyline+1, yycolumn +1, yychar),
new Location(yyline+1,yycolumn+yylength(), yychar+yylength()), lexem);
}
То, как я возвратил его в первоначальном состоянии:
{identifier} {return symbolFactory.newSymbol("IDENTIFIER", IDENTIFIER);}
parser.cup
terminal String IDENTIFIER;