我有以下ANTLR4语法:
grammar test;
start_symbol: '(FILE' line* ')' EOF ;
line: '(' ID ')' ;
ID: [a-zA-Z_] [a-zA-Z0-9_]* ;
White_space : [ \t\n\r]+ -> skip ;
...它完全适用于此示例输入文件:
(FILE
(LINE)
)
但我也希望它可以继续:
(FILE
(FILELINE)
)
这不起作用。显然,词法分析器生成了一个隐含的'(FILE'标记,它也会匹配第二行中的'(FILELINE'),这会导致错误。
我该如何解决这个问题?
奖金:我也想解析一下:
(FILE
(FILE)
)
谢谢:)
答案 0 :(得分:0)
这样的事情可以做到:
start : '(' FILE line* ')' EOF;
line : '(' id ')';
id : ID | FILE;
FILE : 'FILE';
ID : [a-zA-Z_] [a-zA-Z0-9_]*;
SPACE : [ \t\n\r]+ -> skip;