问题标签 [peg]
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 - Is there a parser generator for ruby that can generate a parser with no gem dependencies?
In an effort to make a DSL I have written backwards-compatible with ruby 1.8 I need to do some (relatively straightforward) parsing on the source strings. I could probably do directly with string munging, but in the interest of future maintainability I wanted to investigate first to see what it would take to use a proper parser generator.
The role of this DSL, however, puts an unusual constraint on what ruby gems I can use. The DSL is part of an Xcode project that's distributed with CocoaPods, and CocoaPods is not really about managing ruby dependencies in the build environment.
What this means is, my ruby DSL is effectively restricted to the gems that ship pre-installed on Mac OS X 10.8.
SO, my question: Is there a ruby parser generator out there that generates "stand-alone" ruby code as its final output? Meaning ruby code that does not require
anything that's not part of core ruby?
I have looked at the (sparse) documentation for ANTLR for Ruby, but it (understandably) does not address my question. And from my quick glimpse at treetop, it does seem to use a support package bundled as a gem.
c - 使用 peg/leg 时缓冲区溢出
我正在使用 Ian Piumarta 的 peg/leg 软件来解析我正在研究的玩具语言。不幸的是,解析器的一些输入导致崩溃,Clang 的地址清理程序说是由堆缓冲区溢出引起的。这是我得到的输出和相关的代码行:
这是在grammar.c中分配内存的地方(从我的grammar.leg规范生成)
然后在这里访问:
似乎 yyctx->val 在解析之前设置为 yyctx->vals 。
我曾假设这意味着我正在访问一个解析器变量,该解析器变量是从一些没有正确定义的规则或其他东西中生成的,但是我在我的语法中看不到任何这样的实例(诚然,这与几乎可以肯定的有点打交道许多其他问题)。希望有人至少可以为我指明正确的方向。谢谢!
编辑:为了解决 Dayal rai 的问题,并希望提供更多有用的信息......如果我在通常溢出的地方使用此代码:
这个解析器输入:
我在缓冲区溢出之前得到这个输出:
我真的不明白应该如何在这里布置内存,但是如果我没有让 Clang 捕获这个错误并且它最终不会破坏其他一些重要的内存并导致其他地方的段错误。如果我已经在这里倾倒了所有这些文本,我想我也应该包括语法。这有点狡猾,主要是因为我仍然不确定该语言最终会是什么样子,但我们开始吧:
python - 解析表达式语法中的转义字符串
我正在尝试使用 python 库parsimonious为小型语言实用程序编写语法,但我正在努力编写一个涵盖字符串的部分,尤其是带有转义引号和其他特殊字符的字符串。
我有以下内容:
escapedString
好像还没有定义,但应该接受任何人们合理地期望编程语言中的字符串接受的东西。我想不出从哪里开始。有没有人有什么建议?
parsing - PegJS:如何匹配周围文本中的短语
我正在尝试用 PegJS 做一个解析器
我正在尝试解析这样的东西..
I would like to email john@gmail.com today or tomorrow.
您将如何制作与某些短语匹配的解析器,例如email john@gmail.com
并丢弃周围的字符和空格(如果它们存在)。
我一直遇到的问题是匹配器消耗了整行、短语和所有内容——在更详细的匹配器有机会之前。
另外,有人可以崩溃negative look aheads
吗?(机制和语法)
似乎它们是答案,但我很难找到关于它们的信息。
谢谢你,
吉欧。
parsing - Rebol Parse 中匹配失败的错误消息
基于 PEG 的解析器生成器通常对无效输入提供有限的错误报告。从我读到的内容来看,rebol 的解析方言受到了用正则表达式扩展的 PEG 语法的启发。
例如,在 JavaScript 中键入以下内容:
给出以下错误,因为在声明全局函数时没有提供标识符:
解析器能够在解析过程中准确定位缺少预期标记的位置。预期标记的字符位置用于定位错误消息中的箭头。
rebol 中的解析方言是否提供内置工具来报告无效输入的行和列错误?
否则,是否有自定义推出的解析规则提供此类错误报告的示例?
javascript - 我怎样才能解析像coffeescript中的对象定义
假设我们在 cofeescript 中有这个
编译为
所以假设我有这个 PEG.js 语法
如果您想在在线 PEG 解析器上对其进行测试,并且该two
变量在同一范围内定义了 2 次,而不是在第一个one
变量下定义,那么该语法只做了一半。如何检查 2 行左侧是否有相同的空间,以便将它们添加到相同的范围内?
lua - lpeg 解析一阶逻辑项
正如标题所说,我正在尝试解析例如
在 Lua 表中
这是我建立的语法:
我有以下问题:
- 它无法解析嵌套术语。对于上面的示例,它仅返回
{term, {} }
(虽然可以使用term(A, b, c)
)。 - 要从我使用的字符串中去除引号
{~ ~}
,但正因为如此,我必须从下面的行中移动所有argument
捕获term
。有没有办法避免这种情况? - 我想有一个与每个元素关联的键来指定它的类型,例如,而不是
A
像{value = "A", type = "variable"}
. 我找到了一种方法来做到这一点,{:name: :}
但是,表中元素的顺序丢失了(因为它不会创建一个新表,而只是添加一个键,在这种情况下variable="A"
,这个元素的顺序是不固定的)。如何标记维持订单的物品?
peg - 为什么这个 peg 语法不能识别 42?
使用语法
withpeg.js
识别 4 但不是 42 在这种情况下错误
“第 1 行,第 2 列:预期输入结束,但找到了“2”。”
被报道。显然,解析器完成了start -> b
消耗“4”的规则,然后不知道如何处理“2”。a
但是,当它遇到错误时,为什么不使用其他规则再次尝试呢?
javascript - 为什么 pegjs 无法处理空格规则“”*
以下简单的 pegjs 语法可以正常工作:
它可在http://jsfiddle.net/4V3Zt/获得 。语法也可以粘贴到http://pegjs.majda.cz/online中。
如果我更改 ws 规则以允许空白任意空格:
解析失败并抛出最大调用堆栈异常。(如果使用 jsfiddle,您会在浏览器工具中看到异常。该异常也出现在 node.js 环境中,因此它肯定与 pegjs 有关)。
这个 ws 规则中的 * 有什么问题?