ANTLR语法互左递归

2024-01-29

我确实知道这个问题已经被问过很多次了。我正在尝试使用 ANTLR 构建语法。

Predicate           : LOWERCASE | Predicate VarChars ;

VarChars            : LOWERCASE | UPPERCASE;

fragment LOWERCASE  : [a-z] ;   

fragment UPPERCASE  : [A-Z] ;

我收到以下错误:“以下规则集是相互左递归的 [谓词]”

请告诉我这是如何解决的。如何删除我的antlr语法中的相互左递归。


完全摆脱“Predicate”的递归出现。 VarChars 本身就足以表示小写或大写。使用 + 后缀表示“一个或多个实例”:

fragment LOWERCASE : [a-z];   
fragment UPPERCASE : [A-Z];

VARCHARS  : LOWERCASE | UPPERCASE;
PREDICATE : LOWERCASE VARCHARS+;

应用于您的示例,这将取消“p”和“PA”作为谓词的资格,并限定“pA”。

观察如何PREDICATE and VARCHARS仍然是词法分析器规则(与句法规则相对),因为它们描述了词位的形成方式。因此它遵循全大写的命名约定(Antlr 不在乎,但它提高了可读性)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ANTLR语法互左递归 的相关文章

  • ANTLR:“规则范围内缺少属性访问”问题

    我正在尝试构建一个 ANTLR 语法来解析标记句子 例如 DT The NP cat VB ate DT a NP rat 并有语法 fragment TOKEN A Z a z fragment WS t WSX WS DTTOK DT
  • ANTLR 3 中 wikitext-to-HTML 的工作示例

    我试图在 ANTLR 3 中充实一个 wikitext to HTML 翻译器 但我一直陷入困境 您知道我可以检查的工作示例吗 我尝试了 MediaWiki ANTLR 语法和 Wiki Creole 语法 但无法让它们在 ANTLR 3
  • 是否需要担心“解析器规则中的隐式标记定义”?

    我正在使用 ANTLR 和 ANTLRWorks 2 创建我的第一个语法 我已经完成了语法本身 它识别用所描述的语言编写的代码并构建正确的解析树 但除此之外我还没有开始任何事情 让我担心的是 解析器规则中第一次出现的标记都会用黄色曲线下划线
  • 将简单的 Antlr 语法转换为 Xtext

    我想将一个非常简单的Antlr语法转换为Xtext 所以没有句法谓词 https stackoverflow com questions 5728659 translate antlr grammar into xtext grammar
  • ANTLR语法互左递归

    我确实知道这个问题已经被问过很多次了 我正在尝试使用 ANTLR 构建语法 Predicate LOWERCASE Predicate VarChars VarChars LOWERCASE UPPERCASE fragment LOWER
  • 在 Linux 上安装 antlr4 c++ 运行时后,一些包含文件被破坏

    我在linux上下载了antlr4工具并安装了c 运行时 usr local include 我创建了一个小语法文件 使用antlr4命令成功生成了解析器和词法分析器 但是在编译主文件时出现以下错误 我改变了Interval h里面的标题
  • xtext 中的终端/数据类型/解析器规则

    我正在使用 xtext 2 4 我想做的是类似 SQL 的语法 让我困惑的是我不确定哪些东西应该被视为终端 数据类型 解析器规则 到目前为止我的语法相关MyTerm is Model terms MyTerm MyTerm constant
  • 使用 ANTLR 解析循环

    我想使用 ANTLR 解析一个简单的类似 matlab 的 for 循环 循环就像 for i 1 8 y i a i i end 我想解析循环并解析8次y i a i i语句 以便对每个语句执行一些操作 我的规则如下 操作在 C 中描述
  • ANTLR4 中是否有相当于“片段”标记的解析器?

    有没有办法告诉 ANTLR4 内联解析器规则 拥有这样的功能似乎是合理的 读完关于 ANTLR 的书后 权威的 ANTLR 4 参考 我还没有发现这种可能性 但是这四年可能已经发生了变化 既然这本书已经出版了 所以我想最好在这里问一下 考虑
  • ANTLR4 将 ParserRuleContext 树展平为数组

    如何压平一个ParserRuleContext将子树放入令牌数组中 这ParserRuleContext getTokens int ttype 看起来不错 但什么是ttype 是token类型吗 如果我想包含所有令牌类型 应使用什么值 P
  • ANTLR4 不报告歧义

    给出以下语法 grammar ReportAmbiguity unit statements statements callStatement lt uncomment this line callStatement CALL ID arg
  • 即使不匹配,ANTLR 词法分析器规则也会消耗字符吗?

    我有一个 antlr 词法分析器规则的奇怪副作用 并且我创建了一个 几乎 最小的工作示例来演示它 在这个例子中我想匹配字符串 0 1 例如 但是当我调试语法时 到达解析器的令牌流仅包含 1 第一个整数 无论 它包含多少位数字 总是会被消耗
  • 如何在 Eclipse 中使用 Antlr4 Ide 查看实时解析树?

    我是 Antlr4 的新手 但我知道 Eclipse 存在一个插件 我有一个简单的问题 创建 g4 文件后 如何可视化实时解析树以便查看输入表达式的树 谢谢 在 Eclipse 中安装 Antlr4Ide 插件后 窗口 gt 显示视图 gt
  • C# ANTLR 语法?

    我正在寻找交钥匙ANTLR http www antlr org C 语法 生成可用的抽象语法树 AST 并且与后端语言无关或以 C C C 或 D 为目标 它不需要支持错误报告 附 我不愿意做任何修复 因为替代方案并不难 这可能太晚了 但
  • Antlr4中有哪些加速解析的方法?

    我对Antlr4的性能有些怀疑 我目前正在使用 Python 和 Antlr4 与 Java 相比 它非常慢 使用 Antlr4 IntelliJ 插件验证 由于我需要使用更大的代码进行解析 因此我计划切换到 Antlr 最快的语言 例如
  • ANTLR4 相当于什么!在词法分析器规则中?

    我正在努力将旧的 ANTLR 2 语法转换为 ANTLR 4 但我在字符串规则方面遇到了问题 STRING r n 这创建了一个STRING其文本包含字符串内容的标记 但是不含开始和结束引号 因为 引号文字后面的符号 ANTLR 4 扼流圈
  • ANTLR 语法也可以识别数字键和整数

    我正在尝试创建一个 ANTLR 语法来解析可选地具有重复计数的键序列 例如 a b c r5 表示 重复键 a b 和 c 五次 我有语法工作KEYS a z A Z 但是当我尝试添加数字键时KEYS a z A Z 0 9 输入表达式如
  • ANTLR“无法启动调试器。等待连接到远程解析器超时。”

    我在 AntlrWorks 中运行的 ANTLR 语法之一抛出 无法启动调试器 等待连接到远程解析器超时 过去 此消息通常会消失 但此消息会持续存在 在搜索 ANTLR 列表时 例如http www antlr org pipermail
  • Antlr 处理异常

    我使用 Antlr 3 和 AST 树开发了一个复杂的语法 ANTLR 生成词法分析器和解析器 问题是 例如 当用户输入无效的语法时 该语法需要 用户没有输入此内容 然后在我的 Eclipse IDE 中出现以下异常 line 1 24 m
  • 在 ANTLR4 中如何检查行的第一个字符是否为“*”?

    我正在尝试为一种相对简单但特殊的语言编写一个解析器 简单地说 规则之一是注释行用星号表示only如果该星号是该行的第一个字符 我如何在 ANTLR4 中正式化这样的规则 我考虑过使用 START LINE COMMENT n n gt sk

随机推荐