Articles of 语法

如何在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 […]

什么是JavaScript`_ | _`?

当我看到这个expression式时,我正在通过javascript解决问题,即将stringparsing为其组成名称,运算符和括号。 return accept(")") ? _|_ : e; 那是什么_|_ ? 那是使用节点的_function吗? 我查找了文档,但没有find任何。 当我尝试使用它时,会发生这种情况: > 5 5 > true ? _|_ : 0 ReferenceError: _ is not defined at eval:1:1 at eval at n.<anonymous> 作为一个澄清,variables_没有在代码中的任何地方定义。 这是在节点v8.1.3上运行,但也适用于Chrome本地浏览器JS。 这里是代码: function tokenise(string) { const tokens = string.match( /[az]+|\(|\)|[!#$%&*+\-\/<=>@^_.,;]+/gi ) || []; const accept = s => s===tokens[0] && tokens.shift() ; […]

在Node.js中是否需要逗号?

在node.js的variables声明中省略逗号会产生风险吗? 例如,像下面这样声明一些全局variables就行了: express = require('express') jade = require('jade') 而且,如果不写下它们是不安全的,我不想写逗号(我不关心“代码的美观/清晰度”)。 重要说明 :我的意思是逗号,而不是分号(有3个关于分号的答案)。 这非常好,甚至build议从node.js中删除分号。 npm的创build者也是这样做的: http : //blog.izs.me/post/3393190720/how-this-works 如有疑问,请查看最新的JavaScript规范: http : //www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf 请注意,你也不需要写 var 为全局variables。 但是这个问题是关于“逗号”的,所以请不要在编辑我的问题时错误地用分号replace逗号(以前做过)。

使用vim keybindings和方法/variables完成的Node.js REPL

据我所知,在Node REPL中获得vim keybindings的标准方法是像这样使用rlwrap : NODE_NO_READLINE=1 rlwrap node 然而,这杀死了方法和variablestab-completion。 有一些解决方法吗?

JavaScript中typeof和instanceof的区别

我正在使用node.js,所以这可能是特定于V8的。 我一直注意到typeof和instanceof之间的差异,但是这里有一个真正让我感到困惑的东西: var foo = 'foo'; console.log(typeof foo); Output: "string" console.log(foo instanceof String); Output: false 那里发生了什么?