我有兴趣在我的 flex 文件中添加分号插入 ala Google Go。
来自 Go 文档:
分号
与 C 一样,Go 的形式语法使用分号来终止语句;与 C 不同,这些分号不会出现在源代码中。相反,词法分析器使用一个简单的规则在扫描时自动插入分号,因此输入文本大部分没有分号。
规则是这样的。如果换行符之前的最后一个标记是标识符(包括 int 和 float64 之类的词)、基本文字(例如数字或字符串常量)或其中一个标记
break continue fallthrough return ++ -- ) }
词法分析器总是在标记后插入一个分号。这可以概括为“如果换行符出现在可以结束语句的标记之后,则插入分号”。
分号也可以在右大括号之前省略,所以像这样的语句
go func() { for { dst <- <-src } }()
不需要分号。惯用的 Go 程序仅在诸如 for 循环子句之类的地方使用分号来分隔初始值设定项、条件和延续元素。如果您以这种方式编写代码,它们还必须在一行中分隔多个语句。
一个警告。永远不要将控制结构(if、for、switch 或 select)的左大括号放在下一行。如果这样做,将在大括号前插入分号,这可能会导致不良影响。像这样写它们
if i < f() { g() }
不像这样
if i < f() // wrong! { // wrong! g() // wrong! } // wrong!
我将如何执行此操作(如何在流中插入令牌,如何查看匹配的最后一个令牌以查看它是否是一个好主意等)?
我也在使用野牛,但 Go 似乎只是使用他们的词法分析器来插入分号。