问题标签 [parse-tree]

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 投票
1 回答
848 浏览

python - 漂亮的 PyParsing 树

pprint有没有人实现了从 PyParsing 输出的解析树的漂亮打印(最好使用 Python 的内置模块),最好是缩进和对齐?

0 投票
2 回答
2575 浏览

c++ - 在 C++ 中表示多遍抽象语法树 (AST)?

我目前正在探索设计一个在多个阶段转换其 AST 的编译器。这个想法是,从解析树开始,每次传递都会转换树,直到生成的 AST 被优化并包含生成中间代码(在本例中为LLVM IR)所需的树的每个节点中的所有必需信息。遍历树可能会显着改变其结构,例如通过运算符优先级解析将运算符和操作数列表更改为有序操作的层次结构。请注意,通过可能会使结构的某些部分完全不变。

所以,我的问题是我如何最好地(阅读:最容易,尽可能少的重复)表示在 C++ 中具有多个中间表示的 AST?我希望每个阶段的 AST 版本中的节点类型在编译时尊重它们的不兼容性。我认为关键问题是我应该如何表示结构中在传递之间不发生变化的部分,同时避免重复代码?我想这是编译器作者过去多次解决的问题。

请注意,我目前在我的 AST 中使用Boost Variant而不是正常的运行时多态性,并且希望有一个与之兼容的解决方案。

0 投票
1 回答
1709 浏览

antlr4 - ANTLR4 API 显示任意 ParseTree

ANTLR4 当前的 TestRig 工具支持 -gui 选项来解析整个输入文件并以图形方式显示整个结果解析树。我们是否可以先获取解析树,对其进行修改并调用一些 API 以图形方式显示解析树的子集/子树。

我的输入源文件很大,无法查看 TestRig 显示的标准解析树。更重要的是,我想过滤掉很多不相关的语法,专注于验证那些我需要测试的语法。但是从TestRig提供的标准巨大解析树中很难定位到一小部分信息。

0 投票
1 回答
92 浏览

prolog - 显式地使上下文无关语法句子解析失败

我有一个上下文无关的语法句子解析器,它可以正常工作,除了当您输入其知识库中不存在或不符合语法的内容时,它将保持在无限循环中。我假设我简单的 cut 语句将解决此问题,但我不确定将其放置在哪里,因为一切都相互递归。

0 投票
2 回答
184 浏览

language-design - 如何将语言的上下文无关部分与上下文相关部分分开?

我在 comp.theory 列表中读到了这篇精彩的文章:

http://coding.derkeiler.com/Archive/General/comp.theory/2004-03/0189.html

海报指出,大多数编程语言都定义了一个上下文无关的核心,然后在解析树上运行额外的算法来过滤掉语言中非法的结构:

这将语言的上下文无关部分与上下文相关部分分开——这通常被认为是良好的实践(一种用于语言设计的模块化“编程”学科)。

您能否提供一个“Hello World”示例来说明这种技术?也就是说,提供一种简单的上下文敏感语言,识别上下文无关核心,然后勾勒出如何使用上下文无关核心解析输入,然后过滤掉解析树中的非法结构。

你能给我推荐任何讨论这种技术的文章或书籍吗?

0 投票
1 回答
985 浏览

c - 如何制作函数式语言编译器



我正在考虑为它编写一种语言和编译器作为一个夏季项目,并且很难找到有关如何使用解析树或 BNF/EBNF 来编写编译器的信息。总体目标是编写一个编译器,将简化的函数式语言语法解析为 c。我目前正计划用 c 语言编写这个编译器,但如果有人认为这会是一个更好的主意,我不介意用其他东西来做。(虽然我确实想手动完成,但不使用 LEX 之类的工具)

例如,如果我想创建语言ADD并将其语法定义为(+ 3 4),则很容易为其生成 EBNF:

并且更容易制作解析树:

但是你会怎么做:

  1. 在 C 中表示 EBNF 或解析树
  2. 使用此数据获取有效的 C 代码

我觉得如果我能看到一个非常简单的工作示例,就足以让我朝着正确的方向开始。我有一种感觉,你们中的许多人会建议我阅读Dragon Book(似乎是编译器的标准资源),所以我想让您知道它已经订购并发货。

预先感谢您对此提供的任何启示!

-维京绵羊人

0 投票
1 回答
315 浏览

parsing - 这是否需要 2-pass 解析:嵌入在标记中的注释?

使用解析器生成器我想为电子邮件消息中的“发件人”创建一个解析器。以下是 From 标头的示例:

我认为为此实现解析器将很简单。

然而,“From header”语法有一个复杂的地方:注释可以插入到几乎任何地方。例如,可以在 "john" 中插入注释:

并且可以在许多其他地方插入评论。

如何处理这种并发症?它是否需要“2-pass”解析器:第一次删除所有注释,第二次为 From 标头创建解析树?现代解析器生成器是否支持输入的多次传递?可以一次性解析吗?如果是的话,你会画出这个方法吗?

0 投票
2 回答
175 浏览

r - R中函数解析树的冗余

在 R 中,我注意到function运算符的解析树似乎是多余的,因为它的第四个元素似乎总是由前三个元素组成。

例如,

我注意到的一件事是第四个元素确实存储了输入函数的格式。

解析树中第四个元素的目的是什么?我唯一能看到它被使用的是如果你想逐字打印一个函数,你已经可以通过打印函数来做到这一点,例如

0 投票
3 回答
869 浏览

r - 获取 R 中预定义函数的解析树

我觉得好像这是一个相当基本的问题,但我无法弄清楚。

如果我在 R 中定义了一个函数,我以后如何使用函数的名称来获取它的解析树。我不能只使用substitute它,因为它只会返回其参数的解析树,在这种情况下只是函数名。

例如,

我应该如何使用函数的名称访问函数的解析树?例如,如果substitute(function(x){ x^2 })不明确写出整个函数,我将如何获得 的值?

0 投票
1 回答
1023 浏览

python - 使用一组固定词汇随机生成的解析树

我正在使用 Python 3.2,我尝试为一个句子构建一个随机生成的解析树。虽然我确定它会生成句子,但我不确定解析树有多随机,而且我不知道是否有改进此代码的更好/更有效的方法。(我是编程和 Python 方面的新手,最近对 NLP 很感兴趣。欢迎提供任何建议、解决方案或更正。)