问题标签 [tree-grammar]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
98 浏览

c++ - 如何在 ANTLR3 标题部分中转义左/右大括号?

我有一个以 C 为目标语言的 ANTLR3 树语法。此树语法实际上生成 C++ 对象,因此需要包含这些类的标头。我为此使用该@header部分。但是,在输出中,还有一个包含标题部分输出的extern C {and块。}这会导致错误,因为标头具有模板,不能将其声明为具有“C”链接。我想在标题部分输出的开头关闭该块并在最后重新打开它。不幸的是,在@header节内写大括号会破坏 ANTLR3 语法 - 大括号标记@header节的开始和结束。

我怎样才能摆脱这些大括号?

TLDR:我需要将左括号和右括号写入@header我的 ANTLR3 树语法部分。这样做会破坏@header节的语法。如何转义左/右大括号,以便生成的输出的标题部分可以包含左/右括号?

在每次输出后手动编辑它们......很麻烦。

0 投票
1 回答
821 浏览

java - 正则表达式 - 树语法 Antlr Java

我正在尝试用ANTLR (Java) 编写一个关于简化正则表达式的程序。我已经写了一些代码(下面的语法文件内容)

我的下一个目标是写下能够简化正则表达式的树语法代码(例如 a|a -> a 等)。我已经做了一些编码(见下文),但我在定义将节点视为子树的规则时遇到了麻烦(为了简化以下类型的表达式,例如:(a|a)|(a|a) to a 等。 )

小司机班:

谁能帮我解决这个案子?在此先感谢和问候。

0 投票
1 回答
1128 浏览

parsing - 以下几组规则是相互左递归的 TREE GRAMMAR

我有一个完整的解析器语法,而不是生成一个 AST,我可以说使用重写规则和树运算符是正确的。目前我被困在创建树语法的阶段。我有这个错误:

以下规则集是相互左递归的 [direct_declarator, declarator] 和 [abstract_declarator, direct_abstract_declarator]

重写没有输出选项的语法或运算符;设置输出=AST

这是我的树语法。

0 投票
1 回答
297 浏览

java - 使用 ANTLR 树语法复制树的节点

我需要一些指导来尝试解决我使用树语法遇到的问题。基本上,我希望能够做的是替换/复制可能在树中找到的语句。最好通过一个例子来解释。

这是一个示例输入:

想要的输出(稍后):

这是对功能块内语句的简单搜索和替换。我的问题是 ANTLR 是否提供了一种通过树语法来做到这一点的方法?

这是一个应该解析上述输入的语法:

测试.g

测试.java

树点 AST 图

如何使用 Tree Grammar 搜索每个 FUNCALL 并替换为 BLOCK 内部的内容?

提前致谢!

0 投票
1 回答
146 浏览

java - 从此生产规则构建 POJO 对象

我有这种格式的规则:

我需要为给定的规则创建一个 JAVA POJO(setters/getters)。我该怎么做?

是否应该创建任何外部解析器工具。我能够为 OPERATOR 部分创建:

如何为规则创建 POJO Condition->Condition OPERATOR Condition | Condition

0 投票
1 回答
61 浏览

antlr - ANTLR - 连接 AST 的节点

我想知道如何在语法文件中定义AST 的节点有“两个父母”。例如,如果第一棵树的节点“D”也是节点“A”的子节点,我应该使用什么语法以使节点“D”不会重复出现(我想要第二棵树之类的东西)。

如果我使用类似的东西:

节点“D”将重复出现。

0 投票
1 回答
132 浏览

tree - 带有虚构标记的树语法中的奇怪“NoViableAltException”

编译 Tree 语法时,我无法理解“NoViableAltException”异常。

这是我的一小段语法,其中包含给我带来问题的规则:

这会生成一棵树,如:

我的 TreeGrammar 中导致异常的规则:

具体来说,ANTLR 编译器返回以下错误:

如果我将树语法更改为:

没有编译器错误,但我认为这是不正确的,因为在这种情况下,只有一个 MATCH_STATEMENT 块。

注意:我使用的是 ANTLR3 C 运行时。

提前致谢。

0 投票
1 回答
72 浏览

rascal - Rascal:TrafoFields 语法错误:具体语法片段

我正在尝试重新创建 Tijs 的CurryOn16示例“TrafoFields”,从视频中抓取代码,但使用 Java18.rsc 语法而不是他的 Java15.rsc。我已经在 repl 中成功解析了 Example.java ,就像他在视频中所做的那样,产生了一个 var pt。然后我尝试用trafoFields(pt). 我得到的回应是:

我的 TrafoFields.rsc 看起来像这样:

与 Tijs 代码的唯一偏差是我已更改ClassBodyDec*ClassBodyDeclaration*,因为语法将此作为非终端。任何提示还有什么可能是错的?

更新

更多适应Java18语法的非终端重写:

  • 身份证=>身份证