我目前正在研究一种使用JavaCC,Eclipse和JTB的解析器的简单语言。我这样做是为了学习目的。当我运行.java文件时,它给出了以下错误:
Encountered " "var" "var "" at line 2, column 5.
Was expecting: ":" ...
但是当我查看我的代码时,第2行没有这样的东西?!! 我知道这个错误不应该在那里我因为之前的错误已经调试了2个小时了...
修改的 这是我的令牌代码,其中包含" var":
TOKEN :
{
< REQUIRE: "require" >
| < IF: "if" >
| < WHILE:"while" >
| < VAR:"var" >
| < STOP:"stop" >
| < EXEC:"exec" >
| < ELSE:"else" >
}
这是&#34; var&#34;:
的规则定义void VariableDeclaration():{}
{
"var" VariableName() "=" MathExpression() "."
}
void VariableAssign():{}
{
VariableName() "=" MathExpression() "."
}
希望这会有所帮助:)
答案 0 :(得分:0)
输出此错误消息是因为解析器遇到了字符序列&#34; var&#34;,它被识别为解析器在遇到时未处于预期状态的令牌类型。其中一种可接受的令牌种类与字符序列&#34;:&#34;。
相关联简而言之,令牌序列不是语法所描述的语言。
如果你想了解更多,你应该问一个新问题。例如。鉴于这个语法...,为什么这个输入...,导致我的JavaCC生成的解析器发出此错误消息....但是,在将大型语法复制到堆栈交换之前,您应该(a)尝试自己解决问题 - 例如使用JavaCC的优秀调试选项 - 以及(b)将问题简化为最小化失败示例