ANTLR4词法器中无序集的建模

ANTLR4词法器中无序集的建模,antlr4,Antlr4,如何在{}中对一组(无序的)事物进行建模。 每件事可能只发生一次,或者根本不会发生。集合中出现的顺序是随机的。e、 g.set{a,b,c}或set{c,b}。如何在antlr4的lexer中对此进行建模?我根本不会使用lexer。为了在解析器中验证这一点,我将使用如下规则: set : 'set' '{' ( a | b | c )* '}' ; 然后,我将创建解析树侦听器或访问者来验证[0-1]约束。该方法的参数是一个SetContext c

如何在{}中对一组(无序的)事物进行建模。
每件事可能只发生一次,或者根本不会发生。集合中出现的顺序是随机的。e、 g.
set{a,b,c}
set{c,b}
。如何在antlr4的lexer中对此进行建模?

我根本不会使用lexer。为了在解析器中验证这一点,我将使用如下规则:

set
  : 'set' '{'
    ( a
    | b
    | c
    )*
    '}'
  ;
然后,我将创建解析树侦听器或访问者来验证[0-1]约束。该方法的参数是一个
SetContext ctx

if (ctx.a().size() > 1)
  myReportErrorMethod("set can only contain one 'a' item");
if (ctx.b().size() > 1)
  myReportErrorMethod("set can only contain one 'b' item");
if (ctx.c().size() > 1)
  myReportErrorMethod("set can only contain one 'c' item");

杰出的我一直在努力找出如何限制语法词法分析器或解析器中出现的次数。但是上面侦听器中的代码是有意义的!!非常感谢。这回答了我的问题。