我如何阅读这个JavaScript图表?

gev0vcfq  于 12个月前  发布在  Java
关注(0)|答案(5)|浏览(101)

我目前正在阅读 JavaScript:The Good Parts,我在理解它们的“语法”图方面遇到了麻烦。
第一个是空白


的数据
我不太清楚如何阅读它,也许一些代码可以帮助我理解?
谢谢你的帮助在先进的家伙。

polhcujo

polhcujo1#

从最左边的||开始,然后继续向右。第一个向下的条(紧挨着你的起点)不能跟随,因为曲线不是从左边(你正在行进的方向)开始的。如果你看它来自哪里,应该很容易告诉它代表一个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


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

bvuwiixz

bvuwiixz2#

左侧双杠(“||“)可以被视为函数的“输入”,而右边的双条则被视为“输出”。因此,在这种情况下,字符或行是输入,双条之间的路径是测试。如果字符/行被任何测试认为是“白色空格”,则函数的输出将为“true”,否则将为“false”。
特别是,假设你沿着第四条路径走。在这条路径上,你会首先遇到一个“/",随后是另一个“/",然后是任何其他字符,直到EOL字符。在这种情况下,如果代码行是“// an example”,那么输出将为true。

cfh9epnr

cfh9epnr3#

想象一下,如果你是解析器或语言,你需要一组规则来理解输入的字符流。
通过思考解析器是如何工作的,您可以准确地理解构成JavaScript语言的标记的是什么。

yvfmudvl

yvfmudvl4#

你提到的语法图被广泛用于记录Pascal语法。它基本上是如何解析源代码的流程图。图表的每个“块”,在你的例子中,“空白”,就像一个函数调用。从技术上讲,我们谈论的是递归下降解析器。
所以我的想法是:
解析器从输入流中获取一个字符。所以我们去“尝试”空白函数,如果该字符是空格,制表符,行尾或'/'字符,我们进入下一步,如果不是,我们退出并返回'not found'值。
如果它是一个'/',那么我们得到下一个字符。如果它是另一个'/',那么我们读字符,直到我们得到一个行结束,然后退出与'发现'返回值。
如果下一个字符是一个'*',那么我们会读取任何不是'/'或''的字符。
基本上流程是从左到右的,但是当一行循环回到左边时,我们有一个重复。这些图的巧妙之处在于,一旦你掌握了它的窍门,就很容易快速地写出语法正确的代码。而且你可以很容易地按照“流程图”编写递归下降解析器。

pnwntuvh

pnwntuvh5#

(参见this answer
要学习如何阅读铁路图,你需要了解这三种情况下的图表的区别:

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

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


的数据
在“编辑语法”选项卡中,输入以下语法:

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

字符串

相关问题