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>
    )*
}