ANTLR:尾随括号的不同令牌
问题描述:
我正在为BUGS使用ANTLRv4语法 - 我的回购是here,链接指向特定的提交,因此不应过时。ANTLR:尾随括号的不同令牌
下面的最小代码示例。
我想输入规则沿着t
路线去,如果输入为T(
,但沿着id
路线去,如果输入的是T
下面的语法。得到BUGS语法
grammar temp;
input: t | id;
t: T '(';
id: ID;
T: 'T' {_input.LA(1)==(}?;
ID: [a-zA-Z][a-zA-Z0-9._]*;
我ANLTRv4规范重激发与FLEX + BISON词法和解析语法JAGS 4.3.0 source code并入,在文件src/lib/compiler/parser.yy
和src/lib/compiler/scanner.ll
。
他们完成它的方式是使用词法分析器中的尾随上下文,例如, r/s
。在ANTLR中做到这一点的方式是here,但我无法使它工作。
我需要它以这种方式工作,因为语法的另一部分取决于这种机制 - 相关的代码片段here。
您可以通过克隆my repo并运行make
来重新创建我的特定问题 - 这会在解析阶段给出令牌lexed列表和错误。在令牌列表中,字母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._]*;
它的工作,谢谢! – tales