次の簡単な文法を考えてみましょう。
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番目の文字)を削除したいと思います。
何か考え/アイデアはありますか?