语法分析器的任务:
- 检查输入的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分析算法:
表驱动算法
语法制导翻译:
基本思想:为每条合法的句子附加一条相应的语义动作,构建出一个抽象语法树。
网友评论