1.2 表示詞法單元的數據類型
在go/token
包中,詞法單元用枚舉類型token.Token
表示,不同的枚舉值表示不同的詞法單元:
// Token is the set of lexical tokens of the Go programming language
type Token int
所有的詞法單元被分為4類,即特殊詞法單元、基礎字面值、運算符和關鍵字,如圖1-1所示。
圖1-1 詞法單元分類
特殊詞法單元有錯誤、文件結束和注釋3種:
// The list of tokens
const (
// Special tokens
ILLEGAL Token = iota
EOF
COMMENT
...
)
遇到無法識別的詞法單元時統一返回ILLEGAL
,這樣可以簡化詞法分析時的錯誤處理。
Go語言規范定義的基礎字面值主要有以下幾類:
- 整數字面值;
- 浮點數字面值;
- 復數字面值;
- 符文字面值;
- 字符串字面值。
需要注意的是,在Go語言規范中,布爾值true
和false
并不在基礎字面值之列。但是,為了方便詞法解析,go/token
包將true
和false
等對應的標識符也作為字面值詞法單元處理。
下面是字面值詞法單元列表:
// The list of tokens
const (
...
literal_beg
// Identifiers and basic type literals
// (these tokens stand for classes of literals)
IDENT // main
INT // 12345
FLOAT // 123.45
IMAG // 123.45i
CHAR // 'a'
STRING // "abc"
literal_end
...
)
其中,literal_beg
和literal_end
并非實體詞法單元,主要用于限定字面值類型的值域范圍,因此判斷詞法單元枚舉值是否在literal_beg
和literal_end
之間就可以確定詞法單元是否為字面值類型。
運算符和分隔符類型的詞法單元數量最多,具體如表1-2所示。
表1-2 運算符和分隔符類型的詞法單元的枚舉值與符號

除算術運算符之外,運算符還包括邏輯運算符、位運算符和比較運算符等二元運算符(其中二元運算符還可以與賦值運算符再次組合),以及少量的一元運算符,如取地址符、管道讀取符等。而分隔符主要包括圓括號、方括號、花括號,以及逗號、圓點、分號和冒號。
Go語言的25個關鍵字剛好對應25個枚舉值,如表1-3所示。
表1-3 Go語言的25個關鍵字與對應的枚舉值

從這一詞法分析角度看,關鍵字和普通的標識符并無差別。但是,關鍵字在語法分析(后續章節介紹)中有重要作用。
詞法單元對編程語言而言就像26個字母對英文一樣重要,它是組成更復雜的邏輯代碼的基本元素,因此我們需要熟悉詞法單元的分類和屬性。
推薦閱讀
- 多媒體CAI課件設計與制作導論(第二版)
- Modular Programming with Python
- Vue.js前端開發基礎與項目實戰
- Internet of Things with the Arduino Yún
- Building a Recommendation Engine with Scala
- TypeScript項目開發實戰
- Swift語言實戰精講
- Unity&VR游戲美術設計實戰
- 并行編程方法與優化實踐
- 零基礎看圖學ScratchJr:少兒趣味編程(全彩大字版)
- Simulation for Data Science with R
- Elasticsearch搜索引擎構建入門與實戰
- Qt 5.12實戰
- Clojure Data Structures and Algorithms Cookbook
- INSTANT PLC Programming with RSLogix 5000