问题标签 [pegjs]
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.
javascript - PEGjs:在定义算术函数时请求帮助/指南
我正在学习 PEGjs 语法,我请求以下帮助或指导:
我有这样的功能,PRODUCT(), SUM(), DIVIDE()
PRODUCT 可以将 number /PRODUCT()/SUM()/DIVIDE(
) 作为参数(任何数字,但逗号分隔)
同样,SUM 可以采用以逗号分隔的任意数量的参数。
DIVIDE 将采用两个参数(必须有 2 个),数字或其他函数
有人可以帮助或指导我如何实现吗?
到目前为止我的规则
上述规则仅支持两个数字的乘积/总和。我怎样才能实现上述目标?
在此先感谢 Manjunath Reddy
javascript - 配置 Karma 以使用 requirejs 加载 pegjs
尝试使用 PegJS 和 requirejs 测试项目。我有几个源文件,实现为通过 require API 加载的 AMD 模块(定义)。目录结构下方:
我编写了一个parser.js模块来加载 PegJS 语法文件并使用 PegJS 创建一个 peg 解析器:
这适用于使用节点在命令行上执行的 main.js。现在我想使用 karma、jasmine 和 PhantomJS 来测试我的项目。我有一个像这样的karma.conf.js:
还有一个名为test-main.js的需要引导文件,它是这样配置的:
现在,当我启动我的测试(grunt karma
)时,我得到了这个错误:
因此,我尝试以 karma.conf.js 的方式将pegjs包含在 Karma 加载的文件中:
当我这样做时,我仍然得到一个错误:
查看 pegjs 模块,确实有一个 arrays.js 文件:
因此也尝试包含数组:
我得到:
因为:
因此,除了加载 npm 模块,我尝试以这种方式加载 bower 模块:
你又来了:
还尝试不在业力生成的网页中包含 pegjs:
但它失败了:
试图将 bower_component 文件夹放在 js 文件夹中,但没有成功。
所以我不知道要从这里去......在谷歌或这里找不到任何相关的东西。使用 karma 来 requirejs/pegjs 似乎是一个特定的问题......欢迎任何想法。
更新以下丹的回答:
所以我在parser.js中从同步要求切换到异步要求:
尝试在karma.conf.js中包含 pegjs bower 组件:
或不包括它:
但总是得到同样的错误:
是的,该文件存在:
UPDATE2:终于理解并找到了一个可以接受的解决方案。
javascript - 允许在 PEG.js 语法定义中使用引号和 unicode
如何在 PEG.js 语法定义中允许单引号和双引号以及 unicode 字符?更具体地说,我希望能够捕获可以包含单引号和双引号(很可能必须是 \ 转义)和所有 unicode 字符的字符串。
目前我有以下内容:
_ name:$(PROP_ASCII+) CHAR_SQ val:$(PROP_ASCII_INNER*) CHAR_SQ
这将捕获类似
key'value'
PROP_ASCII* 定义为
PROP_ASCII
= [!-&(-<>-~]
PROP_ASCII_INNER
= [ -&(-~]
因此,如果 value 包含标准 ASCII 字符且不包含单引号,则此方法工作得很好而且花花公子......但我想支持我上面描述的内容,所以这样的事情将成为可能:
key'somé\'value\'☂'
想法?
javascript - pegjs 正则表达式匹配单词直到找到单词集合中的单词
我正在为一个项目使用 pegjs 解析器生成器,我很难创建一个应该匹配所有单词的语法,直到它不应该匹配的单词集合。作为字符串“门是黄色的”中的一个示例,我希望能够匹配直到 is 的所有单词,告诉 pegjs 解析器从单词 is 开始解析。我想让解析器中断的单词集合是“is”、“has”和“of”。
目前的语法规则如下:
如何创建阻止解析器包含我的单词集合的前瞻性?
peg - 使用 PEG.js 进行简单的搜索/替换
我试图了解如何使用 PEG.js 在文本中进行简单的搜索/替换。当然这不是解析器的预期用途,但无论如何我很好奇这些语言背后的逻辑以产生一些搜索/替换。
我遇到的问题是很难正面定义某些定义的补充。一个例子:假设我想搜索和替换类似这样的语法:
很难积极地描述whatever_is_not_my_syntax
PEG.js 中的my_syntax
内容,而不会!expression
与[^characters]
.
你能帮助我吗?如果有任何关于这个主题的书籍或参考书目,我将不胜感激。先感谢您。
javascript - 是否可以将 PEG.js 与令牌数组而不是字符串一起使用?
我有以下类将代表不同类型的数据:
然后我构造输入数组:
然后我为 PEG.js 构建了一个语法:
我知道我可以使用带有字符串作为输入的 PEG.js(例如fasfa)。但我看不出有办法使用我自己的令牌输入流。有可能吗?
更新
最初的问题可以概括为“我需要一种方法来一次构建一个工具栏”。目前我有 3 种类型的块:Append、Squash 和 Final。
几个例子:
我认为可以将这个问题视为某种语言问题。那就是我有一个令牌输入流,我需要将其转换为其他东西(例如某个对象)。
parsing - 以任意顺序接受三个可选元素的 PEG 语法
假设我们有三个元素a
b
和c
。
一个有效的表达式使用这三个元素(和可选的空格)。
- 这三个元素中的至少一个必须存在。
- 所有三个元素都是可选的(只要存在其他两个元素中的至少一个,请参见 1)。
- 这三个元素的提供顺序并不重要。
有没有一种惯用的方式来编写满足这三个要求的 PEG 语法?
我在http://pegjs.org/online上使用 peg.js并解决了 (1) (lookahead) 和 (2),但 (3) 让我无法理解。有什么建议么?
javascript - 语法匹配函数规则的次数超过了要求的次数
这是我使用的语法。匹配规则 'Func' 后的操作对输入字符串 if(diff("col")) 调用了 12 次,而不是 2 次。
调试我意识到在解析 Eq 规则时变量 peg$currPos 被设置了。我无法理解确切的行为
javascript - 测试 PEG.js 中的所有替代模式
我想使用 PEG.js 来识别几种不同格式的数字:
如果在替代序列中较早存在部分匹配,则 PEG.js 不会寻找替代。大多数数字以整数开头,如果不是,则以实数开头。我该如何重写它以便单独测试每个替代方案?(我对将规则组合成更少的规则不感兴趣。)
parsing - 如何使用 pegjs 语法仅解析评论?
我写了一个 pegjs 语法,它可以解析任何类型的 js/c 风格的注释。但是,它并不能很好地工作,因为我只设法捕获了评论本身,而忽略了其他所有内容。我应该如何更改此语法以仅从任何类型的输入中解析注释?
语法:
输入:
错误