执行体的语义分析
? 表达式的语义分析
? 语句的语义分析
? 赋值语句的语义分析
? 调用语句的语义分析
? 标号语句的语义分析
? 结构语句的语义分析
表达式语句的语义分析
? 分析重点,检查运算分量的相容性,求出
表示式的类型。
? 表达式的形式:
E → C | V | f(E1,…,En)
| E1 op E2 | E1 rop E2
? 分析过程
变量的语义分析
? 变量的种类:
V → id| Varid[E]| Varid.id| Varid?
? 分析原理:
id:
查符号表,是否有声明?
varKind?
返回 id.typePtr
Var(id)
? Varid[E]:
Var(Varid);
arrayType?
type(E)? IndexType
返回 ElemType.
? Varid.id:
Var(Varid);
recordType?
id是否在域名表中?
返回 id.typePtr
? Varid ?:
Var(Varid);
fileTy? 返回 CompType
pointTy? 返回 TypeName.TypePtr
赋值和过程调用语句的语义分析
? Varid:= E:
查符号表;是否有声明?
varKind?
检查 Type(E)? Varid.tyPtr
? p(e1… en):
查符号表;是否有声明?
routKind?
Param?.Parai.Formkind? ei.Kind
Param?.Parai.FormType? ei.Type
n? Length( Param)
结构语句的语义分析
? 问题,结构语句结束符对应多个结构语句
结束。
? 解决办法,对结构化语句重新定义,使得
每个结构化语句都自带结束符。
? 分析重点,对标号语句的局部化的处理
? 分析过程,进入结构语句时建立本层 LDEF和
LUSE表,结束时删除本层 LDEF和 LUSE表。
修改后的结构语句
Statement→ IF Expr THEN Statement FI
Statement→ IF Expr THEN Statement
ELSE Statement FI
Statement→ WHILE Expr DO Statement OD
Statement→ FOR,.,DO Statement OD
Statement→ BEGIN StatemenList END
总结
? 符号表:
标识符、类型、值的表示:
局部化处理方法:
? 类型的语义分析:
主要工作:
? 程序的语义分析,
声明部分:
表达式、语句部分:
工作重点:
分析过程:
? 表达式的语义分析
? 语句的语义分析
? 赋值语句的语义分析
? 调用语句的语义分析
? 标号语句的语义分析
? 结构语句的语义分析
表达式语句的语义分析
? 分析重点,检查运算分量的相容性,求出
表示式的类型。
? 表达式的形式:
E → C | V | f(E1,…,En)
| E1 op E2 | E1 rop E2
? 分析过程
变量的语义分析
? 变量的种类:
V → id| Varid[E]| Varid.id| Varid?
? 分析原理:
id:
查符号表,是否有声明?
varKind?
返回 id.typePtr
Var(id)
? Varid[E]:
Var(Varid);
arrayType?
type(E)? IndexType
返回 ElemType.
? Varid.id:
Var(Varid);
recordType?
id是否在域名表中?
返回 id.typePtr
? Varid ?:
Var(Varid);
fileTy? 返回 CompType
pointTy? 返回 TypeName.TypePtr
赋值和过程调用语句的语义分析
? Varid:= E:
查符号表;是否有声明?
varKind?
检查 Type(E)? Varid.tyPtr
? p(e1… en):
查符号表;是否有声明?
routKind?
Param?.Parai.Formkind? ei.Kind
Param?.Parai.FormType? ei.Type
n? Length( Param)
结构语句的语义分析
? 问题,结构语句结束符对应多个结构语句
结束。
? 解决办法,对结构化语句重新定义,使得
每个结构化语句都自带结束符。
? 分析重点,对标号语句的局部化的处理
? 分析过程,进入结构语句时建立本层 LDEF和
LUSE表,结束时删除本层 LDEF和 LUSE表。
修改后的结构语句
Statement→ IF Expr THEN Statement FI
Statement→ IF Expr THEN Statement
ELSE Statement FI
Statement→ WHILE Expr DO Statement OD
Statement→ FOR,.,DO Statement OD
Statement→ BEGIN StatemenList END
总结
? 符号表:
标识符、类型、值的表示:
局部化处理方法:
? 类型的语义分析:
主要工作:
? 程序的语义分析,
声明部分:
表达式、语句部分:
工作重点:
分析过程: