c語言的某些符號,例如 /、* 和 = ,只有乙個字元長,稱為單字元符號。
而c語言中的其他符號,例如 /* 和 == ,以及識別符號,包括了多個字元,稱為多字元符號
當c編譯器讀入乙個字元 ' / ' 後又跟了乙個字元 ' * ',那麼編譯器就必須做出判斷:是將其作為兩個分別的符號對待,還是合起來作為乙個符號對待。
c語言對這類問題的規則可以歸納為:每乙個符號應該包含盡可能多的字元。這個處理策略有時被稱為「貪心法」,或者「大嘴法」。
詳細說來就是:編譯器將程式分解成符號的方法是,從左到右乙個字元乙個字元地讀入,如果該字元可能組成乙個符號,那麼再讀入下乙個字元,判斷已經讀入的兩個字元組成的字串是否可能是乙個符號的組成部分;如果可能,繼續讀入下乙個字元,重複上述判斷,直到讀入的字元組成的字串已經不可能組成乙個有意義的符號。
除了字串與字元常量,符號的中間不能嵌有空白(空格符、製表符和換行符)。
例如:== 和 = = 不同;a---b 和 a-- -b相同,和 a- --b不同。
這些類似準二義性(near-ambiguity)問題。
C詞法分析中的「貪心」法
本章 的是符號和組成符號的字元之間的關係,以及有關符號含義的一些常見的誤解。當我們閱讀乙個句子時,我們並不去考慮組成這個句子的單詞中單個字母的含義,而是把單詞作為乙個整體來理解。確實,字母本身並沒有什麼意義,我們總是將字母組成單詞,然後給單詞賦予一定的意義。對於c語言或其他語言編寫的程式,道理也是一...
C詞法分析中的「貪心」法
本章 的是符號和組成符號的字元之間的關係,以及有關符號含義的一些常見的誤解。當我們閱讀乙個句子時,我們並不去考慮組成這個句子的單詞中單個字母的含義,而是把單詞作為乙個整體來理解。確實,字母本身並沒有什麼意義,我們總是將字母組成單詞,然後給單詞賦予一定的意義。對於c語言或其他語言編寫的程式,道理也是一...
C 詞法分析器中的「貪心法」
編譯器將程式分解成符號的方法是,從左到右乙個字元乙個字元的讀入,如果該字元可能組成乙個字元,那麼再讀入下乙個字元,判斷已經讀入的兩個字元組成的字串是否可能是乙個符號的組成部分 如果可能,繼續讀入下乙個字元,重複上述判斷,直到讀入的字元組成的字串已不再可能組成乙個有意義的符號。a b這個表示式你要怎麼...