编译器---语法分析器(java)

语法分析器的任务:

  1. 检查输入的token是否符合语法
  2. 为符合语法的语句建立抽象语法树,输出。

程序语言语法:

数学理论:上下文无关文法(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,}

语法分析的方法:

  1. 自顶向下分析:
  • 递归下降分析(预测分析算法):

为每一个非终结符构造一个分析函数,用前看符号指导产生式规则的选择

  • LL分析算法:

每次都通过查表完成分析过程

  1. 自底向上分析:
  • LR分析算法:

表驱动算法

语法制导翻译:
基本思想:为每条合法的句子附加一条相应的语义动作,构建出一个抽象语法树。

我的语法分析部分的代码

你可能感兴趣的:(编译器---语法分析器(java))