问题标签 [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.
compiler-construction - 如何为 Erlang VM 编译
我正在尝试为应用程序中的用户脚本实现一种小型描述语言。基本上,用户描述了如何从其他对象创建对象。(不是真正的编程语言)。我也可以使用 JSON(但它会更冗长)。
我使用 leex 和 yecc,我有一个不错的解析树。说它是这样的:
有了这棵树,我想构建这样的东西:
但我不知道从哪里开始。我可以在运行时读取树并构建乐趣,但我真的想学习如何编译(并希望有更好的性能)。
我应该将我的解析树转换为 Erlang AST,然后编译 erlang 模块吗?
谢谢。
parsing - 使用 YESCC 解析基于缩进的语法(如 Python)
我有以下代码:
我的自定义标记器转换为:
但是我无法使用以下 Yecc 解析它:
它给了我以下输出:
非常欢迎任何帮助,谢谢。
erlang - 无法让 Yecc 和 Leex 工作
我正在尝试创建一个非常简单的 DSL,它采用格式如下的字符串
把它变成类似的东西
我的 Leex 文件是这样的:
我的 Yecc 文件如下所示:
我得到的输出:
erlang - 在 Elixir/Erlang 中使用 Yecc 解析器将项目附加到映射
我正在尝试在 Elixir 中使用 Leex/Yecc 解析特定的日志文件。几个小时后,我得到了最简单的工作方案。但是我想进行下一步,但我不知道该怎么做。
首先,这里是一个日志格式的例子:
我的简单尝试仅使用第一行,但它们的多个条目,例如:
这很有效,并给了我一张包含文本和日志行类型(警告)的漂亮地图:
那是完美的。但如上所示,日志行可以在下一行继续,用竖线字符表示|
。我的词法分析器有管道字符,解析器可以理解它,但我想要的是下一行附加到text
我的地图值。现在它只是作为字符串附加到地图中。所以而不是:
我需要:
我查看了网上的示例,但其中大多数都有非常明确的“结束”标记,例如结束标记或结束括号,然后我仍然不清楚如何添加属性,因此最终的 AST 是正确的.
为了完整起见,这是我的词法分析器:
还有我的解析器:
如果你能走到这一步,已经谢谢你了!如果有人能帮忙,那就更感谢了!
parsing - 在yecc中获取行号
我正在使用 yecc 来解析我的标记化 asm-like 代码。在提供类似代码"MOV [1], [2]\nJMP hello"
和词法分析之后,这就是我得到的回应。
当我解析这个时,我得到
但我希望每个操作都有行号,以便在代码中进一步获得有意义的错误。
所以我将解析器更改为:
(评论code
是旧的,工作规则)
现在我得到
{:error, {1, :assembler_parser, ['syntax error before: ', ['\'MOV\'']]}}
提供相同的输入后。如何解决这个问题?
elixir - 我可以让 Elixir 执行与变量匹配的引用代码吗?
也许这不是要走的路,但这是我最初的猜测,我愿意接受提示和更正。
我一直在为我部分继承和扩展的简化查询方言编写解析器,允许用户编写如下内容:
plant where accession.code='2018.0047'
它还没有准备好,但是缺少的中间步骤很清楚,除了最后一个:我如何执行结果?
我的目标是等效Ecto.Query.from
查询的报价表示。对于上面的例子,就我而言,等效的是:
我一直在研究__schema__
函数返回的结构,一切看起来都很可行,我的意思是我知道如何从模块中提取表名,以及从给定名称的关联中提取所有者和相关模块和键,所以让我们假设我的解析器确实返回了这个值:
如何让 Ecto 执行它?
或者从 yecc 解析器生成 Elixir 代码的最佳方法是什么?
erlang - {:error, {:undefined, :standard_syntax_parser, ['之前的语法错误:', []]}}
所以我正在尝试使用yecc。
对于输入:
我明白了
如果我删除围绕 string_content 的任何(左或右)string_delmeter:
为了
它返回
我真的不明白这种行为,问题出在哪里?