2014-09-26 51 views
0

我目前正在使用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" > 
} 

,这是 “无功” 的规则定义:

void VariableDeclaration():{} 
{ 

    "var" VariableName() "=" MathExpression() "." 
} 

void VariableAssign():{} 
{ 
    VariableName() "=" MathExpression() "." 
} 

希望这有助于:)

+1

你可以包含它正在尝试阅读的代码吗?至少第一位? – Pokechu22 2014-09-26 14:58:52

+0

@Pokechu22第一行?确定 – ANON 2014-09-26 16:04:43

+0

出现错误是因为解析器在预期不包含“var”的一组令牌之一时遇到令牌“var”。如果你想要更好的答案,你必须发布输入文本和语法的相关部分。如果你打开解析器调试,你会看到自己正在发生的事情。 – 2014-09-26 16:06:19

回答

0

输出此错误消息的原因是解析器遇到字符序列“var”,该字符序列被识别为解析器在遇到时未处于预期状态的标记种类。其中一种可接受的标记类型与字符序列“:”相关联。

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

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

+0

实际上所有的函数/关键字在语法中都被描述为一种令牌类型,但它只给我一个错误“var”,用于定义 – ANON 2014-09-28 10:14:29

+0

我添加了语法 – ANON 2014-09-28 10:20:14