官术网_书友最值得收藏!

第1章 詞法“陷阱”

在閱讀一個英文句子時,我們并不去考慮組成這個句子的單詞中單個字母的含義,而是把單詞作為一個整體來理解。確實,字母本身并沒有什么意義,我們總是將字母組成單詞,然后給單詞賦予一定的意義。

對于用C語言或其他語言編寫的程序,道理也是一樣的。程序中的單個字符孤立來看并沒有什么意義,只有結合上下文才有意義。因此,在p->s = "->";這個語句中,兩處出現的'-'字符的意義大相徑庭。更精確地說,上式中出現的兩個'-'字符分別是不同符號的組成部分:第一個'-'字符是符號->的組成部分,而第二個'-'字符是一個字符串的組成部分。此外,符號->的含義與組成該符號的字符'-'或字符'>'的含義也完全不同。

術語“符號”(token)指的是程序的一個基本組成單元,其作用相當于一個句子中的單詞。從某種意義上說,一個單詞無論出現在哪個句子中,它代表的意思都是一樣的,是一個表義的基本單元。與此類似,符號就是程序中的一個基本信息單元。而組成符號的字符序列就不同,同一組字符序列在某個上下文環境中屬于一個符號,而在另一個上下文環境中可能屬于完全不同的另一個符號。


 

譯注:

如上面的字符'-'和字符'>'組成的字符序列->,在不同的上下文環境中,一個代表->運算符,一個代表字符串"->"。


 

編譯器中負責將程序分解為一個一個符號的部分,一般稱為“詞法分析器”。

再看下面一個例子:

if (x > big) big = x;

這個語句的第一個符號是C語言的關鍵字if,緊接著下一個符號是左括號,再下一個符號是標識符x,再下一個是大于號,再下一個是標識符big,以此類推。在C語言中,符號之間的空白(包括空格符、制表符或換行符)將被忽略,因此上面的語句還可以寫成:

if
(
x
>
big
)
big
=
x
;

本章將探討符號和組成符號的字符間的關系,以及有關符號含義的一些常見誤解。

主站蜘蛛池模板: 威远县| 三台县| 屏东县| 迭部县| 肇东市| 扶余县| 中方县| 乌鲁木齐县| 汉沽区| 青浦区| 台中县| 安新县| 上饶县| 温州市| 西林县| 岳普湖县| 南木林县| 吉安市| 永济市| 恩平市| 庆阳市| 达孜县| 余姚市| 万年县| 洪泽县| 新野县| 利川市| 都安| 卓尼县| 乃东县| 朝阳区| 石嘴山市| 自治县| 友谊县| 平原县| 衡南县| 开化县| 济南市| 六安市| 桂林市| 库尔勒市|