我想打印出在解析器中调用的令牌的值(由扫描程序返回),但是每个令牌都显示为空。
例如,当输入文件为
tmp := X*X;
此语法应打印“ 分配了tmp ”,而不是“空分配”:
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);
}
我以YYINITIAL状态返回它的方式:
{identifier} {return symbolFactory.newSymbol("IDENTIFIER", IDENTIFIER);}
parser.cup
terminal String IDENTIFIER;