我不知道去,我只是在学习各种语言的语法。
Go FAQ:"Go借用了BCPL的一个技巧:独立语句的分号在形式语法中,但是在语句结尾的任何行的末尾,它们都会自动注入,而不需要看前面。“
我想知道它是怎么做的,我看了一下lex.go,但是也许我对Go的了解还不够(实际上非常少),但是我没有找到任何关于“语句”或“分号”的引用。
那么--如何在lexer阶段检测有效语句的末尾,而无需进行前瞻性检查?
发布于 2015-01-27 21:17:34
您可以查看语言规范:
形式语法在许多产品中使用分号";“作为终结符。Go程序可以使用以下两条规则忽略大部分这些分号: 当输入被分解为令牌时,如果行的最后标记是,则自动将分号插入非空行末尾的令牌流中。
为了允许复杂语句占据一行,可以在结束")“或"}”之前省略分号。
http://golang.org/ref/spec#Semicolons
发布于 2015-01-27 22:17:30
Go语法分析器根据Go语法识别句子结构(如语句、表达式)。解析器使用扫描器(词法分析器)生成的标记。
分号通过扫描器自动插入到令牌流中,因此解析器没有额外的工作负载。在Go扫描仪中可以找到分号插入码这里。
Go语言规范定义了扫描仪如何插入分号如下;
分号 形式语法在许多产品中使用分号";“作为终结符。Go程序可以使用以下两条规则忽略大部分这些分号:
- an identifier
- an integer, floating-point, imaginary, rune, or string literal
- one of the keywords break, continue, fallthrough, or return
- one of the operators and delimiters ++, --, ), ], or }
https://stackoverflow.com/questions/28179995
复制相似问题