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個字母對英文一樣重要,它是組成更復雜的邏輯代碼的基本元素,因此我們需要熟悉詞法單元的分類和屬性。
推薦閱讀
- C語言程序設計案例教程
- Java應用與實戰
- Getting Started with React
- Game Programming Using Qt Beginner's Guide
- R語言數據可視化之美:專業圖表繪制指南
- 算法訓練營:入門篇(全彩版)
- Java深入解析:透析Java本質的36個話題
- 深入淺出Serverless:技術原理與應用實踐
- 移動界面(Web/App)Photoshop UI設計十全大補
- INSTANT Yii 1.1 Application Development Starter
- C# Multithreaded and Parallel Programming
- IoT Projects with Bluetooth Low Energy
- C陷阱與缺陷
- 零基礎輕松學C++:青少年趣味編程(全彩版)
- ASP.NET求職寶典