我的JavaCC项目有问题。我试图识别具有可能的“变量”前缀,变量的种类和名称(id)的变量声明。但是解析器将第一个单词识别为善良的单词,并且不会继续进行其余的操作。
它说:
Exception in thread "main" ParseException: Encountered " <KIND> "char "" at line 2, column 9.
Was expecting one of:
<VARIABLE> ...
这是我的令牌的声明方式
TOKEN :
{
<START: "start"> {debugStream.println("start");}
| <END: "end"> {debugStream.println("end");}
| <VARIABLE: ("variable" <KIND> <ID>) | (<KIND> <ID>)> {debugStream.println("variable decl");}
| <KIND: "integer"|"real"|"logic"|"char"|"text"> {debugStream.println("kind");}
| <ID: (["a"-"z","_"])+> {debugStream.println("id");}
}
我还尝试将种类和id放入special_tokens中,然后解析器没有错误,但也无法识别变量声明。
编辑:
这是输入字符串
start
char sex
integer num
end
如果您确实希望将“ char sex”标记为一种标记,VARIABLE
则需要在VARIABLE
s中允许空格。例如
<VARIABLE: ("variable" (" ")+ <KIND> (" ")+ <ID>) | (<KIND> (" ")+ <ID>)>
但是,建议您考虑执行以下操作:将VARIABLE
规则更改为
<VARIABLE: "variable">
写一个新的非终结符
void variable() : {} {
<VARIABLE> <KIND> <ID>
|
<KIND> <ID>
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句