2014-01-20 3 views
0

(순서가없는) '사물'을 {} 안에 모델링하는 방법.
각각 한 번만 발생하거나 전혀 발생하지 않을 수 있습니다. 집합에서 발생 순서는 무작위입니다. 예 : set { a, b, c } 또는 set { c, b }. antlr4에 대한 렉서 (lexer)에서이를 모델링하는 방법은 무엇입니까?모델링 ANTLR4 렉서에서

답변

0

나는 이것을 위해 렉스을 사용하지 않을 것입니다. 파서에서이 문제를 확인하려면, 나는 다음과 같은 규칙을 사용합니다 :

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"); 
+0

우수한. 나는 문법 안에서 어커런스의 수를 제한하는 방법을 알아 내려고 애 쓰고 있었다. 위의 청취자 코드는 의미가 있습니다! 고맙습니다. 그건 내 질문에 대한 답변. – user3213604