JavaCC 初学者 - 如何使程序仅在没有重复项时才接受?
JavaCC Beginner - How do I make the program only accept if there are no duplicates?
所以我是 JavaCC 的初学者,我只想接受没有重复的字符串。所以如果输入如下:
A B C
A' B' C'
A'' B'' C''
只有在 `B != B' != B'' 时解析器才会接受它
我觉得我缺少一些基本的东西,而且我在网上找不到很多关于 JavaCC 的简单易懂的教程。如果有人能指出我的写作方向那就太好了。
提前致谢。`
编辑:我应该指出,目前我的解析器接受上面的输入,不管是否重复。
您可以执行如下操作。在解析器class中声明一个字段
Set<String> seen = new HashSet<String>() ;
(这是假设一个非静态解析器。如果解析器是静态的,则该字段必须是静态的并且必须在 reinit
函数中重新初始化。)
那么在你的作品中,你可以做这样的事情。
void start() : { Token t ;} {
( <A>
t = <B> { if( seen.contains( t.image ) ) {
throw new ParserException( "Duplicate" ) ; }
else { seen.add( t.image ) ; } }
<C>
)*
}
所以我是 JavaCC 的初学者,我只想接受没有重复的字符串。所以如果输入如下:
A B C
A' B' C'
A'' B'' C''
只有在 `B != B' != B'' 时解析器才会接受它
我觉得我缺少一些基本的东西,而且我在网上找不到很多关于 JavaCC 的简单易懂的教程。如果有人能指出我的写作方向那就太好了。
提前致谢。`
编辑:我应该指出,目前我的解析器接受上面的输入,不管是否重复。
您可以执行如下操作。在解析器class中声明一个字段
Set<String> seen = new HashSet<String>() ;
(这是假设一个非静态解析器。如果解析器是静态的,则该字段必须是静态的并且必须在 reinit
函数中重新初始化。)
那么在你的作品中,你可以做这样的事情。
void start() : { Token t ;} {
( <A>
t = <B> { if( seen.contains( t.image ) ) {
throw new ParserException( "Duplicate" ) ; }
else { seen.add( t.image ) ; } }
<C>
)*
}