【发布时间】:2017-07-28 18:09:11
【问题描述】:
我正在为BUGS 编写一个ANTLRv4 语法——我的repo 是here,链接指向一个特定的提交,所以不应该过时。
下面的最小代码示例。
如果输入为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._]*;
我的 BUGS 语法 ANLTRv4 规范受到了 JAGS 4.3.0 source code 文件 src/lib/compiler/parser.yy 和 src/lib/compiler/scanner.ll 中的 FLEX+BISON 词法分析和解析语法的极大启发。
他们完成它的方式是在词法分析器中使用尾随上下文,例如r/s。在 ANTLR 中执行此操作的方法是 here,但我无法让它工作。
我需要它以这种方式工作,因为语法的另一部分依赖于这种机制——相关代码片段here。
您可以通过克隆 my repo 并运行 make 来重新创建我的特定问题 - 这将给出解析阶段的标记列表和错误。在令牌列表中,字母 T 被定义为令牌 'T',而不是我希望的 ID。
我觉得在 ANTLR 中有更自然/正确的方法可以做到这一点,但我是新手,无法找到方法。
PS 如果你知道如何更好地命名这个问题,请编辑它。
【问题讨论】:
标签: parsing antlr antlr4 flex-lexer lex