編譯原理學習

編譯原理學習

來自專欄 編譯原理學習點滴

  1. 基礎情況

基本想法是使用基於C語言的。

  1. 詞法分析

詞法分析比較簡單,使用lex完成。

  1. 語法分析

語法分析過程使用yacc(bison)完成,主要涉及到語法樹的建立。

  1. 語法樹結構

語法樹的結構包括

  1. 語法規約過程
  2. 簡單的語法樹
  3. 符號表

符號表的作用。

  1. 符號表設計

typedef enum _SYMBOL_TYPE{ emST_UNKNOWN = 0, emST_Constant, emST_Variable, emST_LabelNotDefined, // e.g: goto Label_XXXX; (but Label_XXXX has not yet been defined) emST_Label, emST_Func,} SYMBOL_TYPE;typedef struct _SYMBOL{ char szName[defSYM_NAME_LEN]; int nLineNo; int nOffset; // offset of variable, if var SYMBOL_TYPE SymType; // when set to emST_Label, nConstVal is the label index int nConstVal; struct _SYMBOL *pNext_InBlock; // next element in block} SYMBOL, *PSYMBOL;typedef enum _BLOCK_TYPE{ emBT_Global = 0, emBT_CompoundStmt, emBT_Declaration, emBT_Iteration, // for, while, do...while emBT_Switch, emBT_If,} BLOCK_TYPE;typedef struct _BLOCK{ BLOCK_TYPE Type; int nVarSize; // starting from 0 int nParamOffset; // starting from -12. param_size + bp + return_pc PSYMBOL pSymTbl; struct _BLOCK *pFather;} BLOCK, *PBLOCK;

  1. 符號表效果
  2. 作用域控制

推薦閱讀:

Leetcodes Solutions 52 N-Queens II
手把手教你實現一個優先隊列
排序——希爾排序
一、緒論 | 數據結構
知識布局-數據結構-二叉查找樹-遍歷

TAG:編程 | 編程語言 | 數據結構 |