问题标签 [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.
ruby - 解析具有嵌套信息结构的纯文本文件的最佳方法
文本文件有数百个这样的条目(格式为 MT940 银行对账单)
这应该进入一个哈希数组,如
我用树顶尝试过,但它似乎不是正确的方法,因为它更适合你想要进行计算的东西,我只想要信息。
我也尝试使用正则表达式
但是递归很困难......
我怎么解决这个问题?
ruby - 我可以在树顶以编程方式“取消匹配”规则吗?
是否可以通过使用树顶中的 ruby 代码验证规则来跳过规则?
说有这样的事情:
我希望单词大小在 2 到 5 个字母之间。如果我发现 text_value 的长度不在 2 到 5 之间,我可以退出规则吗?
ruby - Treetop:解析单个节点返回 nil
我正在尝试了解 Treetop 解析的基础知识。这是一个非常简单的语法,所以我可以说ArithmeticParser.parse('2+2').value == 4
。
解析2+2
工作正常,返回一个节点。但是,解析2
或22
返回nil
.
我错过了什么?
ruby - Treetop 解析器输出的 RSpec 测试不匹配
我有这个规格:
产生这个输出:
如果我删除双引号,我会得到这个输出:
如果我在 expected_output 中添加引号,我会得到:(expected_output = '"## Core\n## Special\n## Omgg\n## Moarheaders\n"'
)
这里发生了什么?
我无法获得 Treetop 结果来将 \n 评估为换行符,并且无论我尝试什么,我都无法让 expected_output 匹配。
我很困惑。
ruby - 树顶语法问题,不匹配所有选项
我正在用树顶 gem 用 ruby 编写一个小的、非常简单的 lisp 解析器,只是为了试验它。但是,它并没有真正解决我想要的结果,而且文档很差,所以很难理解我做错了什么。目前,语法可以匹配符号和布尔值,但不能匹配数字。但是,当我在 atom 规则中切换顺序时,例如切换到 bool / number / symbol 时,它仍然匹配前两个,但不匹配最后一个。树顶宝石是否有限制,这意味着您在规则中只能有两个选项?此外,像 '(3)' 这样的东西仍然无法解析。
我的语法如下:
我正在按照教程中的说明对其进行测试,其中包括:
ruby - 识别 Treetop 语法中的 Ruby 代码
我正在尝试使用Treetop解析 ERB 文件。我需要能够处理如下行:
由于 Treetop 是用 Ruby 编写的,并且您使用 Ruby 编写 Treetop 语法,Treetop 中是否已经有一些现有的方式可以说“嘿,在这里查找 Ruby 代码,并给我它的故障”,而无需我编写单独的规则来处理Ruby 语言的所有部分?我正在寻找一种方法,在我的.treetop
语法文件中,有类似的东西:
ruby_code
Treetop 提供的一些规则在哪里处理。
编辑: 其他人使用 Ruby-lex 解析了 ERB,但我在尝试重现他所做的事情时遇到了错误。rlex 程序在生成解析器类时没有生成完整的类。
编辑:对,所以你很沮丧,但感谢您提供的信息。:) 对于我的硕士项目,我正在编写一个需要使用 ERB 作为输入的测试用例生成器。幸运的是,就我的目的而言,我只需要识别 ERB 代码中的一些内容,例如if
语句和其他条件以及循环。我想我可以提出 Treetop 语法来匹配它,但需要注意的是它对于 Ruby 来说并不完整。
ruby - Treetop:获取节点的偏移量
我正在使用 Treetop 为一种小型编程语言生成解析器。
成功解析后,我想对语法树进行一些语义分析。理想情况下,每当我遇到一段(语义上的)无效代码时,我都想打印一条错误消息,其中包含发生错误的行。我知道这是可能的,因为如果我这样做
我得到类似的东西
本质上,我想要一种访问offset
给定SyntaxNode
对象(或其子类)属性的方法。不幸的是,根据http://treetop.rubyforge.org/semantic_interpretation.html唯一可用的方法Treetop::Runtime::SyntaxNode
是terminal?
、和nonterminal?
,因此似乎没有内置的方法来执行此操作。text_value
elements
ruby - 使用 ruby 的 treetop peg 解析 debian Packages.gz
我正在尝试使用 Ruby 的树梢打开 Packages.gz,但在使关键字和值明确时遇到了麻烦。这是我的树顶语法:
这是我的示例输入:
这几乎可以 100% 工作,但是在检查 url 时会失败。问题是一个 URL 包含一个“:”,我似乎无法抓住它。当我编辑示例的主页条目并将“:”替换为“_”时,它会直接通过。
这是我的第一个 PEG 语法,但我可以说我需要使它不那么模棱两可/更简洁。查看高级文档,我想将标签定义为
但我不完全明白它在做什么。标签不能(没有换行或任何东西)我的意思是(换行或什么都没有)。微妙之处逃过了我的...
切换到那种格式会帮助我吗?有人知道为什么不匹配吗?
ruby - Treetop 语法中的匹配标签对
我不想重复Cthulhu 的答案,但我想使用 Treetop 匹配成对的打开和关闭 HTML 标签。使用这个语法,我可以匹配开始标签和结束标签,但现在我想要一个规则将它们联系在一起。我尝试了以下方法,但使用它会使我的解析器永远运行(无限循环):
我试图以递归括号示例和Treetop Github 页面上的负前瞻示例为基础。我引用的其他规则如下:
我知道我需要允许匹配单个开始或结束标签,但如果存在一对 HTML 标签,我希望将它们组合在一起。通过将它们与我的语法匹配来做到这一点似乎最干净,但也许有更好的方法?
parsing - 用于 Python 样式缩进的 PEG
您将如何在以下任何可以处理 Python/Haskell/CoffeScript 样式缩进的解析器生成器(PEG.js、Citrus、Treetop )中编写解析表达式语法:
尚不存在的编程语言的示例:
更新: 不要尝试为上面的示例编写解释器。我只对缩进问题感兴趣。另一个示例可能是解析以下内容: