问题标签 [yecc]

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 回答
620 浏览

compiler-construction - 如何为 Erlang VM 编译

我正在尝试为应用程序中的用户脚本实现一种小型描述语言。基本上,用户描述了如何从其他对象创建对象。(不是真正的编程语言)。我也可以使用 JSON(但它会更冗长)。

我使用 leex 和 yecc,我有一个不错的解析树。说它是这样的:

有了这棵树,我想构建这样的东西:

但我不知道从哪里开始。我可以在运行时读取树并构建乐趣,但我真的想学习如何编译(并希望有更好的性能)。

我应该将我的解析树转换为 Erlang AST,然后编译 erlang 模块吗?

谢谢。

0 投票
1 回答
196 浏览

parsing - 使用 YESCC 解析基于缩进的语法(如 Python)

我有以下代码:

我的自定义标记器转换为:

但是我无法使用以下 Yecc 解析它:

它给了我以下输出:

非常欢迎任何帮助,谢谢。

0 投票
1 回答
127 浏览

erlang - 无法让 Yecc 和 Leex 工作

我正在尝试创建一个非常简单的 DSL,它采用格式如下的字符串

把它变成类似的东西

我的 Leex 文件是这样的:

我的 Yecc 文件如下所示:

我得到的输出:

0 投票
1 回答
174 浏览

erlang - 在 Elixir/Erlang 中使用 Yecc 解析器将项目附加到映射

我正在尝试在 Elixir 中使用 Leex/Yecc 解析特定的日志文件。几个小时后,我得到了最简单的工作方案。但是我想进行下一步,但我不知道该怎么做。

首先,这里是一个日志格式的例子:

我的简单尝试仅使用第一行,但它们的多个条目,例如:

这很有效,并给了我一张包含文本和日志行类型(警告)的漂亮地图:

那是完美的。但如上所示,日志行可以在下一行继续,用竖线字符表示|。我的词法分析器有管道字符,解析器可以理解它,但我想要的是下一行附加到text我的地图值。现在它只是作为字符串附加到地图中。所以而不是:

我需要:

我查看了网上的示例,但其中大多数都有非常明确的“结束”标记,例如结束标记或结束括号,然后我仍然不清楚如何添加属性,因此最终的 AST 是正确的.

为了完整起见,这是我的词法分析器:

还有我的解析器:

如果你能走到这一步,已经谢谢你了!如果有人能帮忙,那就更感谢了!

0 投票
1 回答
47 浏览

parsing - 在yecc中获取行号

我正在使用 yecc 来解析我的标记化 asm-like 代码。在提供类似代码"MOV [1], [2]\nJMP hello"和词法分析之后,这就是我得到的回应。

当我解析这个时,我得到

但我希望每个操作都有行号,以便在代码中进一步获得有意义的错误。

所以我将解析器更改为:

(评论code是旧的,工作规则)

现在我得到 {:error, {1, :assembler_parser, ['syntax error before: ', ['\'MOV\'']]}}

提供相同的输入后。如何解决这个问题?

0 投票
1 回答
48 浏览

elixir - 我可以让 Elixir 执行与变量匹配的引用代码吗?

也许这不是要走的路,但这是我最初的猜测,我愿意接受提示和更正。

一直在为我部分继承和扩展的简化查询方言编写解析器,允许用户编写如下内容:

plant where accession.code='2018.0047'

它还没有准备好,但是缺少的中间步骤很清楚,除了最后一个:我如何执行结果?

我的目标是等效Ecto.Query.from查询的报价表示。对于上面的例子,就我而言,等效的是:

我一直在研究__schema__函数返回的结构,一切看起来都很可行,我的意思是我知道如何从模块中提取表名,以及从给定名称的关联中提取所有者和相关模块和键,所以让我们假设我的解析器确实返回了这个值:

如何让 Ecto 执行它?

或者从 yecc 解析器生成 Elixir 代码的最佳方法是什么?

0 投票
3 回答
129 浏览

erlang - {:error, {:undefined, :standard_syntax_parser, ['之前的语法错误:', []]}}

所以我正在尝试使用yecc。

对于输入:

我明白了

如果我删除围绕 string_content 的任何(左或右)string_delmeter:

为了

它返回

我真的不明白这种行为,问题出在哪里?