語法分析器的任務:
- 檢查輸入的token是否符合語法
- 為符合語法的語句建立抽象語法樹,輸出。
程序語言語法:
數學理論:上下文無關文法(CFG)
上下文無關文法是一個四元組(T,N,P,S) ,T:終結符集合,N:非終結符集合,P:產生式規則集合,S:唯一的開始符號。
以下是我定義的語法
S->P
P->fm(M)B 函數語法
M->T V M; | ε 函數傳遞參數
T->num | bool | string 變量類型
V->id | id_num |id_bool 變量
B->IB | WB | ε 函數體
I->i(C){E;}e{E;} 條件語句
W->w(C){E} 循環語句
C->VQV 條件比較
Q->'>'|'<'|'>='|'<='|'==' 比較符號
E->V'='K 表達式
K->GG'
G'->'+'GG' | '-'GG' | ε
G->VA_
A_->*VA_ | '/'VA_ |ε
補充注釋:
{f:func,m:main,i:if,e:else,w:while,}
語法分析的方法:
- 自頂向下分析:
- 遞歸下降分析(預測分析算法):
為每一個非終結符構造一個分析函數,用前看符號指導產生式規則的選擇
- LL分析算法:
每次都通過查表完成分析過程
- 自底向上分析:
- LR分析算法:
表驅動算法
語法制導翻譯:
基本思想:為每條合法的句子附加一條相應的語義動作,構建出一個抽象語法樹。