Parsing ANTLR:带尾随括号的不同令牌

Parsing ANTLR:带尾随括号的不同令牌,parsing,antlr,antlr4,flex-lexer,lex,Parsing,Antlr,Antlr4,Flex Lexer,Lex,我正在为我的repo编写一个ANTLRv4语法,链接指向一个特定的commit,所以不应该过时 下面的最小代码示例 如果输入为t,我希望输入规则沿着t路径,但是如果输入为t,则沿着id路径,用于下面的语法 grammar temp; input: t | id; t: T '('; id: ID; T: 'T' {_input.LA(1)==(}?; ID: [a-zA-Z][a-zA-Z0-9._]*; 我的ANLTRv4 BUGS语法规范是从4.3.0中包含的FLEX+BISON词法

我正在为我的repo编写一个ANTLRv4语法,链接指向一个特定的commit,所以不应该过时

下面的最小代码示例

如果输入为t,我希望输入规则沿着t路径,但是如果输入为t,则沿着id路径,用于下面的语法

grammar temp;

input: t | id;
t: T '(';
id: ID;

T: 'T' {_input.LA(1)==(}?;

ID: [a-zA-Z][a-zA-Z0-9._]*;
我的ANLTRv4 BUGS语法规范是从4.3.0中包含的FLEX+BISON词法分析语法中获得的,它位于文件src/lib/compiler/parser.yy和src/lib/compiler/scanner.ll中

他们实现它的方式是在lexer中使用尾部上下文,例如r/s。在ANTLR中实现它的方法已经给出,但我无法让它工作

我需要它以这种方式工作,因为语法的另一部分依赖于这个机制相关的代码片段

您可以通过克隆并运行make来重新创建我的特定问题—这将给出解析阶段中已分析的标记和错误的列表。在tokens列表中,字母T按字母“T”的词法排列,而不是我希望的ID

我觉得在ANTLR中有更自然/正确的方法,但我对这一点还不熟悉,无法找到一种方法


PS如果您知道如何更好地命名此问题,请编辑它。

如果我正确理解此问题,以下代码将正常工作:

grammar temp;

input: t | id;
t:     T '(';
id:    ID | T;

T:      'T';
LPAREN: '(';
ID: [a-zA-Z][a-zA-Z0-9._]*;