golang版本: 1.13.1 golang
詞法分析階段是編譯過程的第一個階段。這個階段的任務是從左到右一個字符一個字符地讀入源程序,即對構成源程序的字符流進行掃描而後根據構詞規則識別單詞(也稱單詞符號或符號)。詞法分析程序實現這個任務。詞法分析程序能夠使用lex等工具自動生成。
bash
go於1.5開始實現了自舉,而第一階段的詞法分析由cmd/compile/internal/syntax/scanner 實現的.ide
scanner struct 的定義工具
source struct 的定義測試
測試結果:ui
=== 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,spa
ident字符串處理流程code
scanner的主要流程爲:cdn
詞法解析是一個比較簡單的過程,可是很繁瑣,scanner+source 1000多行的代碼裏有一些特殊狀況的解析,像文件名這些的處理blog
下一步: go語法分析之parser