繁体   English   中英

JavaCC识别令牌中的令牌

[英]JavaCC recognise token within token

我的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允许使用空格。 例如

<VARIABLE: ("variable" (" ")+ <KIND> (" ")+ <ID>) | (<KIND> (" ")+ <ID>)>

但是,建议您考虑执行以下操作:将VARIABLE规则更改为

<VARIABLE: "variable">

写一个新的非终端

void variable() : {} { 
    <VARIABLE> <KIND> <ID>
|
    <KIND> <ID>
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM