问题标签 [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 - Treetop 似乎在一个简单的语法上失败了(5 条规则)
我正在尝试为 C 的一个子集编写一个解析器。
在这种简单(进一步简化)的语法上很难分析树顶的行为。
我的测试用例是“int main(){}”
来自树顶的错误消息是:
因此,问题在于标识符规则......
树顶的版本:1.5.3 和 Ruby 2.1.1
任何想法 ?
ruby-on-rails - 编写 Treetop 规则以任何顺序解析输入
我正在寻找一种编写 Treetop 规则的方法,该规则将以任何顺序找到一些值。所以:
我想解析这些输入:
我怎样才能做到这一点?谢谢
ruby - 使用 Citrus 解析表达式语法的堆栈级别太深
我正在尝试使用类似于 Treetop 的 Citrus for Ruby 中的语法来处理最终将成为布尔逻辑的内容。我遇到了递归问题,但我不清楚具体原因。这是我要处理的文本(最后应该有一个换行符):
这是我的 Citrus 语法(旨在处理更高级的东西):
重要的事情在规则expr
和规则or_expr
中。我已经改变了or_expr
,所以它匹配除了评论之外的所有内容。如果我坚持当前的expr
规则,我会得到堆栈溢出。但是如果我切换它,它就没有 or_expr 和 gtor_expr 之间的选择它工作正常。
我对“选择”的理解是它将尝试按顺序评估它们。如果第一个选择失败,那么它将尝试第二个。在这种情况下,第一个选择显然能够成功,那么如果我包含一个永远不应该采用的第二个选择,为什么会出现堆栈溢出呢?
ruby - Ruby & Treetop - 没有这样的文件或目录 @ rb_sysopen
我正在尝试学习使用 Treetop PEG 语法解析器,但我从一开始就遇到了奇怪的错误。
我有这个文件结构
文件内容如下(列表按上面列出的文件顺序)
node_extensions.rb
解析器.rb
tranlan.treetop
当我运行 parser.rb 时,我收到此错误
怎么了?有什么帮助吗?
ruby - 树顶解析器错误处理机制提供无用的输出
我最近一直在尝试使用 Treetop 为我的一位客户创建用于 CFG DSL 语言的简单解析器。我成功地实现了他需要的所有功能,但与 Treetop 一起工作却是一段非常痛苦的经历。
问题是我无法从 Treetop 获得任何可用的错误消息。我得到的唯一输出是
它总是指向文件中的第一个字符。在解析的语言中发现任何错误真的很糟糕。如果我找不到任何问题,我应该如何逐步开发我的解析器?
我试图改变我的语法以包含递归规则,因为我认为这将有助于解析器尽快创建 AST 节点,但它没有帮助。
我的问题是:我做错了吗?有没有什么好的例子如何为 Treetop 创建 PEG 语法,它在部分派生的树上提供有意义的错误消息?还是 Treetop 库中的错误/错误?
感谢您的任何意见。
peg - 遇到简单的树顶语法问题
我正在玩树顶游戏,但我无法使用简单的语法来生成我期望的 AST。
我的规则是
1:LINE 可以由一个或多个 PIPED COMMAND 组成,用 ; 分隔 2:一个 PIPED COMMAND 是一个或多个由 | 分隔的 COMMAND 3:一个命令是一个或多个由空格分隔的标识符
我期待这样的树
生成这样的树
但是,即使只是正确返回管道命令,我也无法得到它,如果我指定超过 2 个,结果就会混乱
语法目前看起来像:
希望有人可以提供一点帮助!
谢谢
ruby-on-rails - 从简单的树顶解析器获取日期部分:错误的参数类型类(预期模块)
对于以下树顶语法,在解析“3/14/01”(通过t = Parser.parse('3/14/01')
irb)时,我得到一个“TypeError:错误的参数类型类(预期的模块)”。
首先,如果我注释掉<MonthLiteral>
和<DayLiteral>
类引用,一切都很好。注释掉<DateMDY>
,但保留那些 Literal 对象,也会发出错误。注释掉<YearLiteral>
似乎无关紧要(不管它会起作用还是不起作用)——这似乎表明因为前两个是非终端的,我不能为它们生成元素。
很明显,对于 Ruby(或树顶)如何实例化这些类或关于 AST 生成可以解释会发生什么,我并不欣赏。你能解释或指出一些可以帮助我理解为什么<MonthLiteral>
或<DayLiteral>
不能生成对象的东西吗?
其次,这可能是一座过分的桥梁,但我真正喜欢的是获得一个DateMDY
具有三个属性的对象——月、日和年——这样我就可以很容易地从中Time
的方法生成一个 Ruby 对象,但是现在我会满足于将组成部分作为对象来生产。to_time
DateMDY
所以我尝试<DateMDY>
作为对象离开并注释掉对<MonthLiteral>
,<DayLiteral>
和. 的引用<YearLiteral>
。我看到从.parse
(t
在我的原始示例中) 返回的结果 AST 对象有两个公共方法——但是当我调用这些方法时:day_part
,:month_part
这些方法似乎是 nil (比如puts t.day_part
) 并且没有:year_part
方法,所以这似乎没有帮助我出去。
是否有可能以某种方式DateMDY
最终访问其组成部分?
仅供参考,Parser
我使用的代码本身是树顶教程中非常标准的东西node_extensions.rb
,定义对象类的代码也很简单,但如果您需要查看这些代码,我也可以发布它们。
谢谢!理查德
ruby - 为什么有时在 Treetop 语法中发出空字符串而不是自定义节点?
关于我使用 Treetop 的一个反复出现的问题,我希望得到您的建议,我无法解决……有时。我可能错过了一些东西。
我怀疑你们中的许多人都有正确的习语或习惯来解决这个问题。
我通常使用 Treetop,如下所示:
- 我在 .tt 文件中定义我的语法
- 我修改它以发出自定义解析树对象(继承 Treetop::Runtime::SyntaxNode)。这些类在“parsetree.rb”文件中定义。
- 这些自定义对象有一个 to_ast方法,可以将它们递归地转换为“纯”树顶独立类(构成我的最终 AST)。为此,我有两个单独的模块(ParseTree 和 AST)。
但是,我遇到了一条经典的错误消息,我通常无法修复:
我在这里感到困惑,因为似乎发出了一个空字符串“”而不是我的自定义节点之一。
在这个例子中,在这行 380 我有以下代码(它是关于一个有限状态机)
我与错误有关的语法是:
ruby - 树梢语法续行
我正在尝试为如下语言创建语法
正确解析前面代码的正确 Treetop 语法规则是什么?
我应该能够为三个变量提取以下值
- 这是一个字符串,我知道它没有双引号
- 这个字符串有一个延续,这意味着我可以像这样在多行上写它
- 这个字符串被引号包围
谢谢
ruby - 树顶布尔逻辑运算
我正在实现具有语法的 DSL:
每个关键字都将转换为布尔 ( true
, false
) 值,之后应使用运算符进行计算 and, or, not
我当前的语法规则只匹配字符串[keyword] or [other keyword]
并且在 stings 上失败[keyword] or [other keyword] or [one more keyword]
如何编写与任意数量的or
,and
结构相匹配的语法?
语法:
更新
解析器类
节点扩展