antlr相关内容

AntlrWorks&;and;语言语法错误

处理一个游戏项目,该项目涉及一种脚本语言,我希望将其解释为可以直接执行的虚拟机代码。我已经将语法包括在下面。所有的词法分析器规则都正确地显示在语法图中,但是当我点击任何解析器规则的主体时,对于给定的解析器规则X,我得到“无法显示规则X”,因为没有找到起始状态。 我真的不确定为什么ANTLR会抱怨没有开始状态。语法应该明确地从代码行开始,它不会被任何其他解析器规则引用。此外,右上角的框为绿色, ..
发布时间:2022-08-12 16:40:31 其他开发

有没有办法知道ANTLR解析器当前处于哪个替代规则中?

我想知道antlr当前在哪个替代规则中,它使用ctx.getChildCount()或ctx.id()!=NULL来了解antlr当前在哪个替代规则中。 但我想知道有没有方法可以给出备选规则的具体指标。 我看到此问题How to know which alternative rule ANTLR parser is currently in during visit,但它没有答案。 ..
发布时间:2022-08-12 16:23:08 其他开发

ANTLR未报告的语法歧义

谁能帮我理解ANTLR为什么不报告此语法中的歧义问题? https://github.com/NASA-SW-VnV/fret/blob/master/fret-electron/support/NuSMVParser/NuSMV.g4#L61-L78 simpleExpr和ltlExpr中的规则以这样一种方式重复,即始终有两个替代路径来构建任何内容,并对其应用and、or、xor、i ..
发布时间:2022-04-12 19:08:32 其他开发

返回不同数据类型的ANTLR AST访问器

我完成了ANTLR CST到AST的转换,并创建了一个特定的Visitor接口,该接口允许我访问所有的AST节点,但我遇到的主要问题是,一些访问应该返回不同的数据类型,我不确定如何处理这一问题。 例如,对于简单的算术运算,我希望从它们各自的访问方法返回一个双精度值;但其他字符串操作需要它们各自的节点返回一个字符串。 因为我的访问方法都需要泛型类型T,所以我尝试创建了一个名为Result的类和 ..
发布时间:2022-04-12 19:07:01 Java开发

使用ANTLR4生成的访问器生成AST

我正在将ANTLR3语法转换为ANTLR4语法,这意味着我必须删除所有树重写规则,因为它们现在必须在代码中实现,并且通过使用自定义Visitor访问ParseTree可以生成AST。 旧的语法重写了规则,防止了歧义,并自动生成了想要的树。我在网上找不到任何有用的资源来说明如何使用访问者/侦听器范例来实现这一点。 AVisitor需要用作所有visit*函数的返回类型的类型。如果我需要生成A ..
发布时间:2022-04-12 19:05:11 其他开发

使用ANTLR进行Java表达式解析

我正在用Java编写一个使用Java表达式解析的工具包。我想我应该试着使用ANTLR,因为 它似乎无处不在地用于这类事情 开源替代方案似乎不多 不久前我实际上曾尝试编写自己的通用解析器,但最终放弃了。那东西很难。 我不得不说,在我感觉自己阅读和尝试了很多不同的东西(无论如何,比我预期的要多)之后,ANTLR似乎非常难以使用。该API非常不直观--我从来不太确定我调用它是否正确。 ..
发布时间:2022-03-03 16:41:09 Java开发

解析上下文相关语言

我正在阅读 Terence Parr 的 Definitive ANTLR reference,他说: 语义谓词是一个强大的识别上下文相关的方法通过允许语言结构要驱动的运行时信息识别 但是书中的例子很简单.我需要知道的是:ANTLR 可以解析 context-sensitive 规则,例如: xAy --> xBy 如果 ANTLR 无法解析这些规则,是否还有其他工具可以处 ..

在 ANTLR 中,是否有一种快捷符号来表示某些规则集的所有排列的交替?

在 ANTLR 中,我想定义这样的规则: 规则:( a b c | a c b | b a c | b c a | c a b | c b a ); 但在我的情况下,我有 10 条规则而不是 3 条,我想对这些规则进行置换,因此它变得非常不切实际.有没有什么方法可以在 ANTLR 中表达这一点而不必编写所有排列? 解决方案 我只会匹配任何 a、b 或 c 一次或更多: 规则: ..
发布时间:2021-11-28 18:06:03 其他开发

ANTLR4 访问者模式简单算术示例

我是一个完整的 ANTLR4 新手,所以请原谅我的无知.我遇到了这个演示文稿,其中定义了一个非常简单的算术表达式语法.看起来像: 语法表达;开始:expr;expr : left=expr op=('*'|'/') right=expr #opExpr|left=expr op=('+'|'-') right=expr #opExpr|原子=INT #atomExpr;INT : ('0'..' ..
发布时间:2021-11-28 18:05:42 Java开发

ANTLR 或 JavaCC 哪个更好?

关注点是文档/可学习性、eclipse 集成、工具、社区支持和性能(大致按这个顺序). 解决方案 您不应该排除以下几种选择: JParsec 是一个解析器组合器框架,可让您完全从代码构建解析器. Scala 的解析器组合器框架 解决了类似的问题;然而,Scala 的语法使所有这些都更具可读性. 然后还有由 John Metsker 为他的书 使用 Java 构建解析器;我不记得图 ..
发布时间:2021-11-28 18:05:33 其他开发

什么是 ANTLR 中的“语义谓词"?

什么是 ANTLR 中的语义谓词? 解决方案 ANTLR 4 对于 ANTLR 4 中的谓词,请查看这些堆栈溢出问答: Antlr4 中语义谓词的语法 ANTLR4 中的语义谓词? ANTLR 3 语义谓词是一种在语法上强制执行额外(语义)规则的方法使用纯代码操作. 语义谓词有3种类型: 验证语义谓词; 门控语义谓词; 消除歧义语义谓词. 示 ..
发布时间:2021-11-28 18:04:59 其他开发

如何合并两个AST?

我正在尝试实现一个工具来合并某些源代码的不同版本.给定相同源代码的两个版本,想法是解析它们,生成各自的抽象源树 (AST),最后将它们合并为一个保持语法一致性的输出源——词法分析器和解析器是问题 ..
发布时间:2021-11-26 18:04:04 Java开发

未解析的 AST <O(exp(n))?

抽象问题描述: 在我看来,解析意味着从 AST 创建一个令牌流,当再次解析时会产生一个相等的 AST. 所以 parse(unparse(AST)) = AST 成立. 这等同于找到一个有效的解析树,它会产生相同的 AST. 该语言由 无上下文 S-attributed 语法使用 eBNF 变体. 因此,解析器必须通过所有语法约束都存在的遍历节点找到有效的“路径".这 ..

使用 javax.lang.model 或 ANTLR JavaParser 获取 Java 源代码信息的示例/教程

我想为简单的Java逻辑创建一个类似流程图的自动可视化,为此我需要解析Java源代码,我有2个候选,ANTLR 和 javax.lang.model 的 Java 6.两者都不容易. 我还没有找到一个可以与我想要实现的目标相去甚远的可行示例. 我想找到简单的变量声明、赋值和流程(if、for、switch、布尔条件等) 是否有针对其中任何一个的简单示例或教程?我发现很少有 ANT ..
发布时间:2021-11-26 17:58:23 Java开发

将 Antlr 语法树转换为有用的对象

我目前正在考虑如何最好地获取使用 Antlr 生成的 AST 并将其转换为我可以在我的程序中使用的有用对象. 我的语法(除了学习)的目的是创建一种可执行(运行时解释)语言. 例如,我将如何获取属性子树并实例化特定的 Attribute 类.例如. 以下代码是我的语言: Print(message:"Hello stackoverflow") 将产生以下 AST: 我目前 ..
发布时间:2021-11-26 17:58:13 Java开发

如何使用 Antlr 实现函数调用,以便在定义之前就可以调用它?

一旦构建了 AST,那么实现 tree walker 以便可以以任何顺序定义和调用函数的最佳方法是什么? 例如,这在 PHP 中是有效的: 我猜测一定有第二遍或树转换,但我找不到关于这个主题的任何有趣的东西.问题可能不是 Antlr 特定的问题,但如果您能指出我如何完成此操作的 Antlr 示例,那就更好了! 解决方案 是的,你是对的:这是通过 AST 多次完成的. 您首 ..
发布时间:2021-11-26 17:56:16 其他开发