我设置了使用JavaCC的解析器,我想用一句空话作为令牌(ε - 字)
我试图用一个非终端
void Empty() :
{}
{
}
但我得到一个错误
我尝试了令牌<EMPTY:“”>毫无效果
我想一个标记来表示一个空字
你想一个令牌是一个字符空序列或匹配标记的空序列的非终结?
正如在the JavaCC FAQ解释的,相匹配的令牌的空序列非终结将是
void Empty() : {}
{
{}
}
The syntax of the JavaCC grammar files不允许expansion_choices
是空的。但是,你可以把一个空的Java模块如上。
但是,如果你有这样的非终结,那么Empty()
是一样的{}
。例如,我可以写
void SomeNonterminal() : {}
{
A() B() C()
|
Empty()
}
或者我可以写
void SomeNonterminal() : {}
{
A() B() C()
|
{}
}
这在逻辑上是一样的。
该字符的空序列匹配的令牌很容易定义
TOKEN: { <EMPTY : ""> }
然而,这可能是一个坏主意。如果此令牌是相匹配的话,将再度在词法分析器的下一次匹配,并且你有这些标志的无限序列!
唯一的一次,这将使意义是采取词法出一个词法状态,进入另一种。例如。
<SOMESTATE> TOKEN: { <EMPTY : ""> : DEFAULT }
读了许多问题和文章后,我发现我用{}和它工作得很好