【北航編譯原理筆記】4. 語義分析與符號表

語義分析與符號表

  1. 上下文有關分析(標識符的作用域)
  2. 類型的一致性檢查
  3. 語義處理: 聲明語句(登錄名字的特徵信息到符號表上), 執行語句(按某種操作的目標結構生成代碼)

非分程序結構: 主程序與子程序, 函數分開
分程序結構: 主程序與子程序, 函數嵌套

作用域分 靜態作用域(c, c++) 和 動態作用域(python)

遇到聲明語句填符號表

  1. 填表前查表, 在同一作用域內是否重複定義
  2. 檢查名字種類和說明是否一致
  3. 對於強類型語言,檢查表達式中各變量的類型是否一致
  4. 生成目標指令時,取得所需要的地址

非分程序結構語言的符號表組織

  1. 子程序, 函數名, 公共區名 填入 全局符號表
  2. 在子程序(函數)聲明部分的標識符 填入 局部符號表
  3. 在語句部分的標識符 先查局部符號表,再查全局符號表
  4. 程序單元結束時,釋放局部符號表
  5. 程序編譯完成時,釋放全局符號表

無序符號表(查找(n+1)/2)
有序符號表(線性查找(n+1)/2, 折半查找log2n1log_2n-1)
散列符號表(Hash表)(查找1, 解決衝突)

分程序結構語言的符號表組織

  1. 標識符的作用域是定義該標識符的模塊
  2. 循環體應看作一層(模塊)
  3. 在程序聲明部分讀到標識符,只查本層符號表
  4. 在語句中讀到標識符, 先查本層符號表, 再查外層符號表

棧式符號表: 對於不同層級的符號表, 後建先消

散列符號表的棧式實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章