我想打印出解析器中调用的标记的值(由扫描仪返回),但是每个标记都显示为空。
例如当输入文件是
tmp := X*X;
这个语法应该打印“ tmp assignment ”而不是“null assignment”:
assignment ::= IDENTIFIER:i ASSIGNMENT math_expression SEMI
{: System.out.println(i + " assigned"); :}; // null assigned
有没有其他方法可以获得实际价值(除了书面代码:D),还是我应该做任何进一步的步骤来获得它们?
可能需要的部分代码:
词法分析器
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);}
解析器.cup
terminal String IDENTIFIER;