2017-07-28 47 views
0

我正在为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.yysrc/lib/compiler/scanner.ll

他们完成它的方式是使用词法分析器中的尾随上下文,例如, r/s。在ANTLR中做到这一点的方式是here,但我无法使它工作。

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

您可以通过克隆my repo并运行make来重新创建我的特定问题 - 这会在解析阶段给出令牌lexed列表和错误。在令牌列表中,字母T被勒索为令牌'T',而不是ID,因为我希望它是。

我觉得在ANTLR中有更多的自然/正确的方法来做到这一点,但是我对此很陌生,并且无法想出办法。

PS如果你有一个想法如何更好地命名这个问题,请编辑它。

回答

1

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

grammar temp; 

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

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

它的工作,谢谢! – tales