Tag: pegjs

使用PEG.js语法中的Node.JS语句

在我的语法规则中,我需要检查目录是否存在。 但是,似乎我无法在语法JS中使用Node.JS特定的代码。 这是对的吗? 任何解决方法? 谢谢,抱歉,如果一个问题是一个愚蠢的:) 语法示例: { var fs = require('fs'); function isDirectoryExists(dir) { return fs.existsSync(path); } } Main = "stub" PEG.js 在线游乐场的输出: require is not defined

如何在peg.js中回溯工作(例如)?

我定义了以下最小的Peg.js语法: start = "A1" / "A123" 您可以在沙箱中尝试。 我预料会匹配“A1”和“A123”(根据我的回溯工作原理)。 但事实并非如此:语法识别“A1”而不识别“A123”。 注 :我不是在寻找“相反的术语顺序”的build议,如相关的问题如何将一个简单的语法转换成在PEG.js(预期“一个”,但“一个”find)工作的东西 。 相反,我期待了解我所看到的行为,以及为什么Peg.js的回溯不适用于这种情况。 有关解释为什么颠倒我的术语顺序不起作用的信息,请参阅下面的更实际的示例。 对于一个更现实的例子,考虑单位parsing。 一个语法应该识别带有可选前缀(如“mm”,“mmol”)以及非“公制”单位(如“年”,“星期”或“mo”)的公制单位(如“m”,“mol”)。 下面的Peg.js语法不会识别“mol”,因为它被绊倒消耗“mo”,并且不会回溯。 (改变术语顺序没有帮助;或者说,会导致以“mol”或“mmol”为代价来识别“mo”)。 start = nonmetric / metric / prefix metric metric = "mol" / "l" / "m" / "g" nonmetric = "yr" / "mo" / "week" / "day" / "hour" prefix = "m" / "k" / "c" 我可以在Antlr中做类似的事情,取得很好的成绩: grammar […]

configurationKarma使用requirejs加载pegjs

尝试使用PegJS和requirejs来testing一个项目。 我有几个源文件,作为通过require API加载的AMD模块(define)实现。 在目录结构下面: js/ somefile.js main.js parser.js test/ parser.spec.js 我写了一个parser.js模块来加载一个PegJS语法文件,并使用PegJS创build一个peg分析器: define(function() { 'use strict'; var PEG = require('pegjs'); var grammarFile = 'grammar.peg' return { parse: function(fs, content, debug) { var grammar = fs.readFileSync(grammarFile, 'utf8').toString(); // Build parser from grammar var parser = PEG.buildParser(grammar, { trace: debug }); […] 这与一个main.js在节点的命令行上执行正常工作。 现在我想用业力,茉莉花和PhantomJS来testing我的项目。 我有这样一个karma.conf.js : frameworks: ['jasmine', […]