编译的过程:
例如,一段有错误的程序:
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
运算符: +
*
=
-
界限符: {
}
;
,
(
)
转换:
- 对基本字、运算符、界限符的转换
- 标识符转换
- 常数的转换
- 转换后的格式:类号,内码
语法分析:
描述规则:正规式+有限自动机
语法规则表示:
BNF表示法: A ::= B|C
例如:
句子
::=
<主>
<谓>
<宾>
主语
::=
<定语>
<名词>
赋值语句的语法规则:
- A::= V = E
- E::= (T|E) + T
- T::= (F|T) * F
- F::= V|(E)|C
- V::= 标识符
- C::= 常量
语法分析方法: 推导与归约
推导:最右推导,最左归约
归约:最左推导,最右归约
y=c+)d*(x+b
语法树分析
正确的语法树:
错误的语法树