问题标签 [treetop]

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

ruby - 解析具有嵌套信息结构的纯文本文件的最佳方法

文本文件有数百个这样的条目(格式为 MT940 银行对账单)

这应该进入一个哈希数组,如

我用树顶尝试过,但它似乎不是正确的方法,因为它更适合你想要进行计算的东西,我只想要信息。

我也尝试使用正则表达式

但是递归很困难......

我怎么解决这个问题?

0 投票
1 回答
102 浏览

ruby - 我可以在树顶以编程方式“取消匹配”规则吗?

是否可以通过使用树顶中的 ruby​​ 代码验证规则来跳过规则?

说有这样的事情:

我希望单词大小在 2 到 5 个字母之间。如果我发现 text_value 的长度不在 2 到 5 之间,我可以退出规则吗?

0 投票
1 回答
135 浏览

ruby - Treetop:解析单个节点返回 nil

我正在尝试了解 Treetop 解析的基础知识。这是一个非常简单的语法,所以我可以说ArithmeticParser.parse('2+2').value == 4

解析2+2工作正常,返回一个节点。但是,解析222返回nil.

我错过了什么?

0 投票
1 回答
208 浏览

ruby - Treetop 解析器输出的 RSpec 测试不匹配

我有这个规格:

产生这个输出:

如果我删除双引号,我会得到这个输出:

如果我在 expected_output 中添加引号,我会得到:(expected_output = '"## Core\n## Special\n## Omgg\n## Moarheaders\n"'

这里发生了什么?

我无法获得 Treetop 结果来将 \n 评估为换行符,并且无论我尝试什么,我都无法让 expected_output 匹配。

我很困惑。

0 投票
1 回答
317 浏览

ruby - 树顶语法问题,不匹配所有选项

我正在用树顶 gem 用 ruby​​ 编写一个小的、非常简单的 lisp 解析器,只是为了试验它。但是,它并没有真正解决我想要的结果,而且文档很差,所以很难理解我做错了什么。目前,语法可以匹配符号和布尔值,但不能匹配数字。但是,当我在 atom 规则中切换顺序时,例如切换到 bool / number / symbol 时,它仍然匹配前两个,但不匹配最后一个。树顶宝石是否有限制,这意味着您在规则中只能有两个选项?此外,像 '(3)' 这样的东西仍然无法解析。

我的语法如下:

我正在按照教程中的说明对其进行测试,其中包括:

0 投票
4 回答
739 浏览

ruby - 识别 Treetop 语法中的 Ruby 代码

我正在尝试使用Treetop解析 ERB 文件。我需要能够处理如下行:

由于 Treetop 是用 Ruby 编写的,并且您使用 Ruby 编写 Treetop 语法,Treetop 中是否已经有一些现有的方式可以说“嘿,在这里查找 Ruby 代码,并给我它的故障”,而无需我编写单独的规则来处理Ruby 语言的所有部分?我正在寻找一种方法,在我的.treetop语法文件中,有类似的东西:

ruby_codeTreetop 提供的一些规则在哪里处理。

编辑: 其他人使用 Ruby-lex 解析了 ERB,但我在尝试重现他所做的事情时遇到了错误。rlex 程序在生成解析器类时没有生成完整的类。

编辑:对,所以你很沮丧,但感谢您提供的信息。:) 对于我的硕士项目,我正在编写一个需要使用 ERB 作为输入的测试用例生成器。幸运的是,就我的目的而言,我只需要识别 ERB 代码中的一些内容,例如if语句和其他条件以及循环。我想我可以提出 Treetop 语法来匹配它,但需要注意的是它对于 Ruby 来说并不完整。

0 投票
1 回答
230 浏览

ruby - Treetop:获取节点的偏移量

我正在使用 Treetop 为一种小型编程语言生成解析器。

成功解析后,我想对语法树进行一些语义分析。理想情况下,每当我遇到一段(语义上的)无效代码时,我都想打印一条错误消息,其中包含发生错误的行。我知道这是可能的,因为如果我这样做

我得到类似的东西

本质上,我想要一种访问offset给定SyntaxNode对象(或其子类)属性的方法。不幸的是,根据http://treetop.rubyforge.org/semantic_interpretation.html唯一可用的方法Treetop::Runtime::SyntaxNodeterminal?、和nonterminal?,因此似乎没有内置的方法来执行此操作。text_valueelements

0 投票
1 回答
372 浏览

ruby - 使用 ruby​​ 的 treetop peg 解析 debian Packages.gz

我正在尝试使用 Ruby 的树梢打开 Packages.gz,但在使关键字和值明确时遇到了麻烦。这是我的树顶语法:

这是我的示例输入:

这几乎可以 100% 工作,但是在检查 url 时会失败。问题是一个 URL 包含一个“:”,我似乎无法抓住它。当我编辑示例的主页条目并将“:”替换为“_”时,它会直接通过。

这是我的第一个 PEG 语法,但我可以说我需要使它不那么模棱两可/更简洁。查看高级文档,我想将标签定义为

但我不完全明白它在做什么。标签不能(没有换行或任何东西)我的意思是(换行或什么都没有)。微妙之处逃过了我的...

切换到那种格式会帮助我吗?有人知道为什么不匹配吗?

0 投票
2 回答
760 浏览

ruby - Treetop 语法中的匹配标签对

我不想重复Cthulhu 的答案,但我想使用 Treetop 匹配成对的打开和关闭 HTML 标签。使用这个语法,我可以匹配开始标签和结束标签,但现在我想要一个规则将它们联系在一起。我尝试了以下方法,但使用它会使我的解析器永远运行(无限循环):

我试图以递归括号示例和Treetop Github 页面上的负前瞻示例为基础。我引用的其他规则如下:

我知道我需要允许匹配单个开始或结束标签,但如果存在一对 HTML 标签,我希望将它们组合在一起。通过将它们与我的语法匹配来做到这一点似乎最干净,但也许有更好的方法?

0 投票
5 回答
5857 浏览

parsing - 用于 Python 样式缩进的 PEG

您将如何在以下任何可以处理 Python/Haskell/CoffeScript 样式缩进的解析器生成器(PEG.jsCitrusTreetop )中编写解析表达式语法:

尚不存在的编程语言的示例:



更新: 不要尝试为上面的示例编写解释器。我只对缩进问题感兴趣。另一个示例可能是解析以下内容: