golang版本: 1.13.1
词法分析
词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用lex等工具自动生成。
scanner
go于1.5开始实现了自举,而第一阶段的词法分析由cmd/compile/internal/syntax/scanner 实现的.
struct
scanner struct 的定义
source struct 的定义
TestScanner
测试结果:
=== RUN TestScanner
1 package
1 name => syntax
1 ;
3 import
3 literal => "fmt"
3 ;
5 func
5 name => aaaa
5 (
5 )
5 {
6 name => a
6 :=
6 literal => 123
6 ;
7 name => fmt
7 .
7 name => Println
7 (
7 name => a
7 )
7 ;
8 }
8 ;
--- PASS: TestScanner (0.00s)
PASS
Debugger finished with exit code 0
复制代码
运行过程
主要过程是next的逻辑,scanner的执行通过next来驱动,一个next就是一个token,
ident字符串处理流程
总结
scanner的主要流程为:
词法解析是一个比较简单的过程,但是很繁琐,scanner+source 1000多行的代码里有一些特殊情况的解析,像文件名这些的处理
下一步: go语法分析之parser
有疑问加站长微信联系(非本文作者)