12

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

第一个是空白

在此处输入图像描述

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

感谢各位高手的帮助。

4

5 回答 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

空格、制表符和结束行都结束函数,return或者continue立即结束。但是,如果字符是正斜杠,则需要检查它是单行(//)还是多行(/* */):

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

如果它是单行,它会一直读取到行尾并继续。如果它是多行,它会以类似的方式读取,直到找到“*”后跟“/”,然后继续。

于 2012-10-08T04:41:42.990 回答
3

The left side double bar ("||") can be viewed as the "input" of a function and the right double bar as the "output". So, in this case, a character or line is the input, and the paths between the double bars are the tests. If the character/line is considered "white space" by any of the tests, the output of the function will be "true", otherwise it will be "false."

In particular, let's say you follow the fourth path. On this path you will first encounter a "/", subsequently followed by another "/", followed by any other character until the EOL character. In this case, if the line of code is "// an example", then the output will be true.

于 2012-10-08T04:24:54.180 回答
1

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

通过思考解析器是如何工作的,您可以准确地理解 JavaScript 语言标记的组成部分。

于 2012-10-08T04:31:13.430 回答
1

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

所以我的想法是:

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

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

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

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

于 2012-10-09T22:52:56.633 回答
1

(参考这个答案

要学习如何阅读铁路图,您需要了解图表在这三种情况下的区别:

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

要了解它们的区别(如下图所示),重点是“您从左边缘开始,沿着轨道到右边缘”。所以想象你是火车,你只是右转,不能左转。

在此处输入图像描述

上图由http://bottlecaps.de/rr/创建 在“编辑语法”选项卡中,输入以下语法:

zeroormore ::= element*
zeroorone ::= element?
oneormore ::= element+
于 2017-03-20T11:37:17.867 回答