问题标签 [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 投票
2 回答
83 浏览

ruby - 如何在 Ruby Treetop 树的子节点中触发函数。(原为:如何防止 ruby​​ Treetop 进行 AST 挤压)

我一直在使用树顶。我写了以下规则

http://thingsaaronmade.com/blog/a-quick-intro-to-writing-a-parser-using-treetop.html

我可以解析我的整个输入字符串,但to_array除了最初的函数之外,我没有其他函数被触发。

然后我找到了https://whitequark.org/blog/2011/09/08/treetop-typical-errors/,我发现AST squashing我的规则也在做同样的事情。

我的第一条规则是

一切都被吞噬了body

有人可以建议我如何解决这个问题吗?

编辑 添加代码片段:

测试字符串

编辑:添加更多细节

测试代码签入: https ://github.com/justrajdeep/treetop_ruby_issue 。

正如您在我的node_extensions.rb所有节点中看到的那样,Bodies除了在方法中引发异常to_array。但没有任何异常触发。

0 投票
1 回答
58 浏览

ruby - 在 Ruby Treetop 中使用 elements.map 时,如何处理 0 或多个语句中的非终端节点?

我正在尝试创建一个映射其所有非终端节点的自定义语法节点类。问题是其中一个节点不一定必须存在,这在自定义语法节点类中使用 elements.map 时会产生问题,因为语法节点树会为其创建 SyntaxNode: "" 代替,我有没有创建一个类。

例如,如果我尝试解析:“开始文档\n\nend 文档”。然后我希望这是一个输出:[“begin document”,“\n\n”,“end document”],但我收到错误消息:block in to_array': undefined methodto_array' for SyntaxNode offset=16, "":Treetop::运行时::SyntaxNode (NoMethodError)。

所以我做了一些进一步的调查,发现语法节点树确实在 offset=16 处包含一个 SyntaxNode "",我认为这是由于 (block twoOrMoreNewLines)* 不存在。

我该如何处理这个问题?有没有办法避免 SyntaxNode "" 被创建?

0 投票
1 回答
39 浏览

regex - 你怎么能要求一个未确定的字符在 Ruby Treetop 中连续重复一定次数?

我想创建一个规则,要求非数字、非字母字符连续重复三次。规则看起来像这样:

有没有办法要求它检测到的第一个字符重复三次?

之前有一个关于检测缩进数量的类似问题:PEG for Python style indentation

解决方案是首先初始化缩进堆栈:

然后保存当前行的缩进:

每当新行开始时,它都会像这样查看缩进:

如果缩进更大,它会将新的缩进级别添加到堆栈中。

我可以为我的问题创建类似的东西,但这似乎是一种非常乏味的解决方法。还有其他方法可以创建我的规则吗?

0 投票
1 回答
67 浏览

ruby - 树顶无限递归的简单算术语法

我正在尝试用 Treetop 编写一个简单的计算语法。为了简化这个问题的示例,我只使用变量、数字和+运算符。我希望能够写出这样的表达式:

  • A
  • 1
  • A+B
  • A+1
  • A+1+B

这是我的语法:

当我运行它时,它会无限递归。谷歌搜索了一段时间后,我认为我的问题与左递归有关,但我是解析器的新手,我不太明白这意味着什么。有人可以解释为什么我的特定示例不起作用以及如何解决它?

0 投票
2 回答
2349 浏览

ruby - Visual Studio Code:禁用特定文件类型的错误/警告签入

在工作中,我的团队使用 Ruby 和 Treetop 解析器创建了我们自己的小型脚本语言。该语言本身的语法与 Ruby 非常相似。

我正在使用 Ruby 和 Ruby 扩展来突出显示我们的文件的这种语言的语法,但是 Ruby 扩展会引发错误,因为该语言实际上不是 Ruby。

有没有办法禁用特定文件类型的错误检查?我应该分叉 Ruby 扩展吗?

谢谢。