我正在阅读 Javascript:The Good Parts ,而我无法理解他们的“语法”图表。
第一个是空白
我不太清楚如何阅读它,也许一些代码会帮助我理解?
感谢高级人员的帮助。
答案 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
空格,制表符和结束行都会立即结束此功能,return
或continue
。但是,如果该字符是正斜杠,则需要检查它是单行(//
)还是多行(/* */
):
*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)
要学习如何阅读铁路图,您需要了解这三种情况下图表的不同之处:
零或更多,零或一,一个或多个。
要理解它们之间的差异(如下图所示),点是"你从左边开始,沿着轨道走到右边缘。" 想象一下你是火车,你右转,不能左转。
由http://bottlecaps.de/rr/创建的上述图片 在" Edit Grammar"选项卡,输入以下语法:
zeroormore ::= element*
zeroorone ::= element?
oneormore ::= element+