2012-12-19 4 views
1

다음의 간단한 문법을 ​​고려하십시오. 여기 반복적 인 ANTLR 규칙에서 추가 기호를 제거하십시오.

grammar test; 

options { 
    language = Java; 
    output = AST; 
}      
//imaginary tokens 
tokens{ 
} 


parse 
    : declaration 
    ; 

declaration 
    : forall 
    ; 
forall 
    :'forall' '('rule1')' '[' (('(' rule2 ')' '|')*) ']' 
    ; 
rule1 
    : INT 
    ; 
rule2 
    : ID 
    ; 
ID 
    : ('a'..'z' | 'A'..'Z'|'_')('a'..'z' | 'A'..'Z'|'0'..'9'|'_')* 
    ; 
INT 
    : ('0'..'9')+ 
    ; 
WHITESPACE 
    : ('\t' | ' ' | '\r' | '\n' | '\u000C')+ {$channel = HIDDEN;} 
    ; 

forall (1) [(first) | (second) | (third) | (fourth) | (fifth) |] 

문법 위의 입력 잘 작동 입력하지만 나는 입력에서 추가 파이프 기호 (입력 2 번째로 마지막 문자)를 제거하고 싶습니다.
어떤 생각/아이디어입니까?

답변

1

내 ANTLR 구문은 약간 녹슨하지만이 같은 시도해야합니다 : 대신 (r|)*이다

forall 
    :'forall' '('rule1')' '[' ('(' rule2 ')' ('|' '(' rule2 ')')*)? ']' 
    ; 

(r(|r)*)?을 쓰기. 후자가 파이프가있는 0, 하나 또는 여러 규칙을 허용하는 방법을 볼 수 있습니다.

관련 문제