首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测到语句的结尾?

如何检测到语句的结尾?
EN

Stack Overflow用户
提问于 2015-01-27 21:06:20
回答 2查看 175关注 0票数 1

我不知道去,我只是在学习各种语言的语法。

Go FAQ:"Go借用了BCPL的一个技巧:独立语句的分号在形式语法中,但是在语句结尾的任何行的末尾,它们都会自动注入,而不需要看前面。“

我想知道它是怎么做的,我看了一下lex.go,但是也许我对Go的了解还不够(实际上非常少),但是我没有找到任何关于“语句”或“分号”的引用。

那么--如何在lexer阶段检测有效语句的末尾,而无需进行前瞻性检查?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-27 21:17:34

您可以查看语言规范:

形式语法在许多产品中使用分号";“作为终结符。Go程序可以使用以下两条规则忽略大部分这些分号: 当输入被分解为令牌时,如果行的最后标记是,则自动将分号插入非空行末尾的令牌流中。

  • 标识符
  • 整数、浮点、假想、符文或字符串文字
  • 中断、继续、失败或返回的关键字之一
  • 一个操作符和分隔符++,-,),]或}

为了允许复杂语句占据一行,可以在结束")“或"}”之前省略分号。

http://golang.org/ref/spec#Semicolons

票数 5
EN

Stack Overflow用户

发布于 2015-01-27 22:17:30

Go语法分析器根据Go语法识别句子结构(如语句、表达式)。解析器使用扫描器(词法分析器)生成的标记。

分号通过扫描器自动插入到令牌流中,因此解析器没有额外的工作负载。在Go扫描仪中可以找到分号插入码这里

Go语言规范定义了扫描仪如何插入分号如下;

分号 形式语法在许多产品中使用分号";“作为终结符。Go程序可以使用以下两条规则忽略大部分这些分号:

  1. 当输入被分解为令牌时,如果行的最后标记是,则自动将分号插入非空行末尾的令牌流中。
代码语言:javascript
复制
- 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 }

  1. 为了允许复杂语句占据一行,可以在结束")“或"}”之前省略分号。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28179995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档