我如何阅读这个javascript图?

时间:2012-10-08 04:03:50

标签: javascript

我正在阅读 Javascript:The Good Parts ,而我无法理解他们的“语法”图表。

第一个是空白

enter image description here

我不太清楚如何阅读它,也许一些代码会帮助我理解?

感谢高级人员的帮助。

5 个答案:

答案 0 :(得分:6)

从最左侧||开始,然后继续向右。第一个栏向下(紧靠起点旁边)不能被跟踪,因为曲线不是从左边开始的(你正在旅行的方向)。如果你看它来自哪里,应该很容易告诉它代表一个while循环:

while (!EOF) {} // While there's still text to parse

可以跟随第二行,因为曲线来自左侧(跟随当前目录。)此行表示此if-else语句:

if (char == '/') {}       // Forward slash
else if (char == '\n') {} // Line end
else if (char == '\t') {} // Tab
else if (char == ' ') {}  // Space

空格,制表符和结束行都会立即结束此功能,returncontinue。但是,如果该字符是正斜杠,则需要检查它是单行(//)还是多行(/* */):

*char++;                 // Move to next character
if (char == '*') {}      // Multi line
else if (char == '/') {} // Single line

如果它是一行,它会一直读到行结束并继续。如果是多线,它会以类似的方式读取,直到找到'*'后跟'/',然后继续。

答案 1 :(得分:3)

左侧双栏(“||”)可视为功能的“输入”,右侧双栏可视为“输出”。因此,在这种情况下,字符或行是输入,双条之间的路径是测试。如果任何测试将字符/行视为“空格”,则函数的输出将为“true”,否则将为“false”。

特别是,假设您遵循第四条道路。在这条路径上,您将首先遇到一个“/”,然后是另一个“/”,后跟任何其他字符,直到EOL字符。在这种情况下,如果代码行是“//示例”,则输出将为true。

答案 2 :(得分:1)

将其视为是解析器或语言,并且需要一组规则来理解输入的字符流。

通过思考解析器的工作方式,您可以准确理解构造JavaScript语言标记的内容。

答案 3 :(得分:1)

您引用的语法图被广泛用于记录Pascal语法。它基本上是如何解析源代码的流程图。图表中的每个“块”(在您的示例中为“空白”)就像一个函数调用。从技术上讲,我们正在谈论递归下降解析器。

所以我的思考方式是:

解析器从输入流中获取一个字符。所以我们去“尝试”空格函数,如果该字符是空格,制表符,行尾或'/'字符,我们将进入下一步,如果不是,我们将以'未找到'返回值退出。

如果它是'/'那么我们得到下一个字符。如果它是另一个'/',那么我们读取字符,直到我们得到一个行结束,然后以'found'返回值退出。

如果下一个字符是'',那么我们会看到任何不是'/'或''的内容。等...

基本上,流程是从左到右,但是当一条线环回到左边时,我们有一个重复。这些图表的巧妙之处在于,一旦掌握了它,就可以很容易地快速编写语法正确的代码。您可以通过遵循“流程图”轻松编写递归下降解析器的代码。

答案 4 :(得分:1)

(请参阅this answer

要学习如何阅读铁路图,您需要了解这三种情况下图表的不同之处:

零或更多,零或一,一个或多个

要理解它们之间的差异(如下图所示),点是"你从左边开始,沿着轨道走到右边缘。" 想象一下你是火车,你右转,不能左转。

enter image description here

http://bottlecaps.de/rr/创建的上述图片 在" Edit Grammar"选项卡,输入以下语法:

zeroormore ::= element*
zeroorone ::= element?
oneormore ::= element+