不应该出现“遇到”错误

时间:2014-09-26 14:57:50

标签: java eclipse token abstract-syntax-tree javacc

我目前正在研究一种使用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() "."
}

希望这会有所帮助:)

1 个答案:

答案 0 :(得分:0)

输出此错误消息是因为解析器遇到了字符序列&#34; var&#34;,它被识别为解析器在遇到时未处于预期状态的令牌类型。其中一种可接受的令牌种类与字符序列&#34;:&#34;。

相关联

简而言之,令牌序列不是语法所描述的语言。

如果你想了解更多,你应该问一个新问题。例如。鉴于这个语法...,为什么这个输入...,导致我的JavaCC生成的解析器发出此错误消息....但是,在将大型语法复制到堆栈交换之前,您应该(a)尝试自己解决问题 - 例如使用JavaCC的优秀调试选项 - 以及(b)将问题简化为最小化失败示例