我正在尝试为奇数个空格创建一个令牌。这就是我目前的
TOKEN : {
< SPACE: " " >
| < ODDSPACE: <SPACE> ((<SPACE>)(<SPACE>))* >
}
void Start() :
{}
{
<ODDSPACE>
}
这适用于3,5,7等空间,但是当我尝试仅使用一次空间时失败。任何想法为什么会这样?
答案 0 :(得分:0)
参见JavaCC FAQ的问题3.3。 http://www.engr.mun.ca/~theo/JavaCC-FAQ/javacc-faq-moz.htm#tth_sEc3.3
挑选哪个正则表达式用于识别下一个标记有三个黄金规则:
- 正则表达式必须描述剩余输入流的前缀。
- 如果多个正则表达式描述了前缀,则使用描述输入流的最长前缀的正则表达式。 (这称为&#34;最大咀嚼规则&#34;。)
- 如果多个正则表达式描述了最长的前缀,则使用.jj文件中首先出现的正则表达式。
醇>
在您的情况下应用规则3。您可以将start
重写为
void Start() :
{}
{
<ODDSPACE> | <SPACE>
}