回覆列表
  • 1 # 使用者9272196178563

    瞭解它們具體做什麼的,大概也就知道會報什麼錯了啊。詞法分析就是取出一個個詞,然後給詞歸類、給個種別碼什麼的。所以遇到不認識的詞或符號,一般就會報錯。語法分析就是根據語法規則識別出語法單位(賦值語句、條件語句之類),並檢查語法單位在語法結構上的正確性。語義分析是對語法單位進行靜態的語義審查(動態的在執行時才可確定)。分析其含義,下一步就會用另一種接近目標語言或直接用目標語言去描述這個含義。此階段要求語句的含義和使用規則正確。比如嘛……我隨便寫個文法吧:<我的文法>定義為:<語句> { <語句> } //我的文法需要有一條語句,或者多條語句<語句>定義為: <定義語句> | <賦值語句> <定義語句>定義為:int 變數名; <賦值語句> 定義為 :變數 = <項> { +<項> | -<項> }; <項> 定義為:數字 | 變數 其中變數需要先定義才可以使用。變數名需要字母開頭,後面可以跟數字和字母。如果我程式如下:int 111;int aa;aa = $ + b;詞法分析:一邊讀一邊會為大家分分類~<關鍵字,int ><數字,111 > ……<變數,aa> <符號1,; ><變數,aa > <符號2,= > 讀到個$是什麼鬼!報錯!登記:<錯誤符號,$><符號3,+ > <變數,b >……語法分析:按結構給大家檢查檢♂查分析int 111; :一開始讀到了int!這一定是定義語句,那麼按定義語句的結構來下一個讀到的就是關鍵字。結果你給了我個<數字,111 >,這不能忍,報錯!……分析aa = $ + b;:一開始不是int,那麼肯定是賦值語句(我的文法只有兩種語句哈)。賦值語句結構為 :變數 = <項> { +<項> | -<項> }; ,一開始讀到了<變數,aa > ,<符號2,= > 都匹配了這結構,接著應該來個<項>。接著卻讀到了個<錯誤符號,$>,不是<項>所要求的變數或者數字,報錯!後面的字元符合結構,分析完畢。(實際上,要看具體情況,如果詞法分析沒有儲存<錯誤符號,$>,此處的處理可能會不一樣。還有我這用的是自上而下分析法,不同的演算法分析起來也是有各種的不同。)語義分析:語法分析到aa = $ + b;的時候,一般就會順便檢查aa和b是否有定義。發現b沒有定義,不符合我的使用規則,報錯。在實際上,常見的語義錯誤還有很多:一、型別相關:不相容的型別賦值、實參形參不相容、函式返回值定義和實際返回的不相容等等。二、是否重複:識別符號重複定義、列舉型別元素重複、switch中case重複等等。三、控制流錯誤:break前面要有個迴圈或者switch之類的吧,else前面要有if……快期末考了,我剛開始準備複習這科來著,內心擔憂(╭ ̄3 ̄)╭?回顧回顧課本

  • 中秋節和大豐收的關聯?
  • 內分泌失調對睡眠是否有影響?