如何阅读这个JavaScript图表?

12

我目前正在阅读 Javascript: The Good Parts,但我很难理解其中的“语法”图表。

第一个是空白符

进入图片描述

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

非常感谢大家提前的帮助。


3
基本上,空格、制表符和换行符都被视为空格,以及任何注释。 - Brad
我现在有点明白了。但是结构呢?下一节的例子还是有点困惑 :/ 我应该跳过语法章节,直接学习对象吗? - RufioLJ
3
"Follow the tracks"的意思是跟随轨道。火车只能在弯道上走“平滑的方式”。如果轨道分叉,必须同时沿着两条轨道前进 - 火车必须克隆自己,每个克隆品都走一条独立的轨道。如果火车遇到未能满足的条件,则火车必须爆炸。 - user166390
1
这些图表的解释规则很简单:你从左边缘开始,沿着轨道向右移动。当你前进时,你会遇到椭圆形的文字和矩形中的规则或描述。任何按照轨迹制作的顺序都是合法的。任何不能按照轨迹制作的顺序都是不合法的。每端有一根杠的铁路图表允许在任何两个标记之间插入空格。每端有两根杠的铁路图表则不允许。 - j08691
在图表冥想1小时内学习JavaScript语法? :) - zb'
显示剩余2条评论
5个回答

7
从最左边的||开始,向右延伸。不能跟随下降的第一条线(紧挨着起点),因为曲线不是从左侧(您正在前进的方向)开始的。如果您看一下它来自哪里,应该很容易看出它代表了一个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

如果是单行文本,它会读取至行末并继续执行。如果是多行文本,它会以类似的方式读取,直到找到“*”后跟“/”为止,然后继续执行。

3
左边的双竖杠("||")可以看作是函数的"输入",右边的双竖杠则为"输出"。因此,在这种情况下,字符或行就是输入,而双竖线之间的路径则是测试。如果在任何一个测试中,字符/行被视为"空格",函数的输出将为"true",否则为"false"。
特别地,假设您遵循第四条路径。在这条路径上,您将首先遇到一个"/",随后跟着另一个"/",之后是任何其他字符直到EOL字符。在这种情况下,如果代码行为"// an example",则输出结果为true。

好的,这很有帮助,但是我在第三行之后卡住了。出于某种原因,我认为图表试图告诉我第三行的 // // 的空格。 感谢您的帮助。 - RufioLJ

1

(参考this answer)

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

零或多个、零或一个、一个或多个

为了理解它们之间的区别(如下图所示),关键是“你从左边开始,沿着轨道向右边行驶。” 所以想象一下你是火车,你只能向右转,不能向左转。

enter image description here

上面的图片由http://bottlecaps.de/rr/创建。 在“编辑语法”选项卡中,输入以下语法:
zeroormore ::= element*
zeroorone ::= element?
oneormore ::= element+

1

把它想象成你是解析器或语言,你需要一组规则来理解字符输入流。

通过思考解析器的工作方式,你可以准确地理解 JavaScript 语言的构成标记。


1
你所提到的语法图表被广泛用于记录Pascal语法。它基本上是源代码解析的流程图。在你的例子中,每个图表的“块”,比如空格,就像一个函数调用。从技术上讲,我们谈论的是递归下降解析器。
所以我的思考方式是:
解析器从输入流中获取一个字符。因此,如果该字符是空格、制表符、行尾或'/'字符,我们就会“尝试”空格函数,并进入下一步;否则,我们将退出并返回“未找到”的值。
如果它是'/',那么我们就获取下一个字符。如果它是另一个'/',那么我们就读取字符,直到我们得到一个行尾,然后退出并返回“已找到”的值。
如果下一个字符是'',那么我们就读取任何不是'/'或''的内容。等等...
基本上,流程是从左到右的,但当一行回到左边时,我们有一个重复。这些图表的好处是,一旦你掌握了它,很容易快速编写语法正确的代码。而且,你可以通过遵循“流程图”相对容易地编写递归下降解析器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接