JAVACC中如何使用空字作为token?
how to use the empty word in JAVACC as a token?
我正在使用 JavaCC 设置解析器,我想使用空词作为标记(epsilon 词)
我尝试使用非终端
void Empty() :
{}
{
}
但我收到一个错误
我尝试了一个令牌
<空:“”>
什么都没用
我想要一个token来表示一个空词
我找到了解决办法
我用了
{ }
效果很好
您想要一个空字符序列的标记还是匹配一个空标记序列的非终结符?
如 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 }
我正在使用 JavaCC 设置解析器,我想使用空词作为标记(epsilon 词)
我尝试使用非终端
void Empty() :
{}
{
}
但我收到一个错误
我尝试了一个令牌 <空:“”> 什么都没用
我想要一个token来表示一个空词
我找到了解决办法 我用了 { } 效果很好
您想要一个空字符序列的标记还是匹配一个空标记序列的非终结符?
如 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 }