java - Java CUP - 令牌值为空
问题描述
我想打印出解析器中调用的标记的值(由扫描仪返回),但是每个标记都显示为空。
例如当输入文件是
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;
解决方案
推荐阅读
- python - history.append() throws "IndexError: index 184 is out of bounds for axis 0 with size 184"
- prolog - Prolog: show truth table for arbitrary expression using is/2 for some subexpressions
- javascript - create react embeddable widget from create-react-app
- google-cloud-platform - Can not set natIP to an IP resource
- c# - C# UWP ScrollViewer 改变 HorizontalScrollBarVisibility
- python-3.x - Python 与谷歌云语言 api 问题?
- swift - FCM 推送通知在 iOS 12 上不起作用
- c++ - 为什么冗余的额外范围块会影响 std::lock_guard 行为?
- jquery - 如何根据数据表中的条件选中复选框
- c - C程序的执行速度突然提高