[编译原理] 绪论

编译的过程:

image.png

例如,一段有错误的程序:

Void jisuan(){
    int y,c,d;
    x=a-b*50;
    y=c+)d*(x+b;
}

词法分析:

基本字: void int float
标识符: a,b,c,d,x,y,jisuan
常量: 50
运算符: + * = -
界限符: { } ; , ( )

转换:

  1. 对基本字、运算符、界限符的转换
  2. 标识符转换
  3. 常数的转换
  4. 转换后的格式:类号,内码

语法分析:

描述规则:正规式+有限自动机

语法规则表示:

BNF表示法: A ::= B|C

例如:

  1. 句子 ::= <主> <谓> <宾>
  2. 主语 ::= <定语> <名词>

赋值语句的语法规则:

  • A::= V = E
  • E::= (T|E) + T
  • T::= (F|T) * F
  • F::= V|(E)|C
  • V::= 标识符
  • C::= 常量

语法分析方法: 推导与归约

推导:最右推导,最左归约

归约:最左推导,最右归约

y=c+)d*(x+b

语法树分析

正确的语法树:

错误的语法树

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×