JavaCC初学者 - 如果没有重复项,我该如何让程序接受?

时间:2017-03-22 11:51:51

标签: java parsing javacc

所以我是JavaCC的初学者,我想只接受这个字符串,如果没有重复的话。因此,如果输入低于:

A B C
A' B' C'
A'' B'' C''

如果`B!= B'!= B''

,解析器将只接受它

我觉得我缺少一些基本的东西,我找不到很多很容易在线解释JavaCC的教程。如果有人可以指出我的写作方向会很棒。

提前致谢。

编辑:我应该指出,目前我的解析器接受上面的输入,无论重复是什么。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作。在解析器类中,声明一个字段

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