Tag: peg

使用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 […]