ANTLR4:正确匹配公共前缀

ANTLR4:正确匹配公共前缀,antlr4,Antlr4,我有以下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) ) 这是行不通的。显然,lexer生成

我有以下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)
)
这是行不通的。显然,lexer生成了一个隐式的“(FILE”标记,它也将匹配第二行中的“(FILELINE”),这将导致一个错误

我怎样才能解决这个问题

奖励:我还想分析以下内容:

(FILE
  (FILE)
)

谢谢:)

像这样的东西就可以了:

start  : '(' FILE line* ')' EOF;
line   : '(' id ')';
id     : ID | FILE;

FILE  : 'FILE';
ID    : [a-zA-Z_] [a-zA-Z0-9_]*;
SPACE : [ \t\n\r]+ -> skip;