編譯原理學習
來自專欄 編譯原理學習點滴
- 基礎情況
基本想法是使用基於C語言的。
- 詞法分析
詞法分析比較簡單,使用lex完成。
- 語法分析
語法分析過程使用yacc(bison)完成,主要涉及到語法樹的建立。
- 語法樹結構
語法樹的結構包括
- 語法規約過程
- 簡單的語法樹
- 符號表
符號表的作用。
- 符號表設計
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;
- 符號表效果
- 作用域控制
推薦閱讀:
※Leetcodes Solutions 52 N-Queens II
※手把手教你實現一個優先隊列
※排序——希爾排序
※一、緒論 | 數據結構
※知識布局-數據結構-二叉查找樹-遍歷