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

1.3.2 語法分析

如果說詞法分析的作用是從連續的字符中識別出標識符、關鍵字、數字、運算符并存儲為符號(token)流,語法分析的作用就是從詞法分析識別出的符號流中識別出符合C語言語法的語句。

因為計算機無法像人那樣同時看多個標識符、關鍵字、數字、運算符,無法像人那樣一眼看出這是一個函數聲明,那是一個if語句,只能非常笨拙地一個符號一個符號去識別。與詞法分析器有些類似,語法分析器也是依據用計算機表示的語法,一個符號一個符號地識別出符合C語言語法的語句。語法的計算機表示就是產生式。在語法分析器中把通過產生式產生的C語言語法映射成一套模板,并把這套模板融匯在語法分析器的程序中。語法分析器的作用就是將詞法分析器識別出的符號(token)一個一個地與這套模板進行匹配,匹配上這套模板中的某個語法,就可以識別出一句完整的語句,并確定這條語句的語法。

我們以案例中“int fun(int a,int b);”這條函數聲明語句為例描述這個過程,它與語句模板的匹配情景如圖1-38所示。

圖1-38 fun函數聲明語句與模板匹配的結果

這段token流最終與函數聲明模板相匹配,在匹配成功后,計算機就認為此語句為函數聲明語句,并以語法樹的形式在內存中記錄下來,情景如圖1-39所示。

圖1-39 fun函數聲明語句生成的語法樹

以樹型結構來記錄分析出的語句是一個非常巧妙、深謀遠慮、通盤考慮的選擇。一方面,樹型結構能夠“記住”源程序全部的“意思”,另一方面,樹型結構更容易對應到運行時結構。

主站蜘蛛池模板: 贵南县| 宝清县| 正宁县| 涪陵区| 扎囊县| 龙海市| 绥中县| 盖州市| 盘锦市| 九龙县| 衡阳市| 宝丰县| 乐清市| 闻喜县| 高陵县| 来宾市| 江永县| 巴彦县| 商丘市| 酒泉市| 安乡县| 鄂托克旗| 墨玉县| 探索| 呼伦贝尔市| 兰西县| 东阿县| 耿马| 金山区| 社旗县| 郑州市| 衡南县| 汝阳县| 宜章县| 合江县| 泰宁县| 武义县| 淅川县| 江门市| 五常市| 乡宁县|