执行体的语义分 析 ◆表达式的语义分析 ◆语句的语义分析 赋值语句的语义分析 调用语句的语义分析 标号语句的语义分析 结构语句的语义分析
执行体的语义分析 表达式的语义分析 语句的语义分析 赋值语句的语义分析 调用语句的语义分析 标号语句的语义分析 结构语句的语义分析
表达式语句的语义分析 ◆分析重点:检查运算分量的相容性,求出 表示式的类型。 表达式的形式: E→c|V|f(∈E1,,En) IE op e,I E rop E2 ◆分析过程
表达式语句的语义分析 分析重点:检查运算分量的相容性,求出 表示式的类型。 表达式的形式: E → C | V | f(E1,…,En) | E1 op E2 | E1 rop E2 分析过程
变量的语义分析 令变量的种类: V→ id var id[E] I Varid. id varid个 分析原理: 查符号表,是否有声明? varkind? Var(id) 返回id. typePtr
变量的语义分析 ❖ 变量的种类: V → id| Varid[E]| Varid.id| Varid ❖ 分析原理: id: 查符号表,是否有声明? varKind? 返回id.typePtr Var(id)
☆ Varid[E]: Var (Var id) array Type type(e)? IndexType 返回E| emType ☆ Var id.id: Var(Var id) recordType? id是否在域名表中? 返回 id. typePtr Varid↑ Var(Var id) fileT?返回 Comp Type pointY?返回 TypeName. Typeptr
❖ 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
赋值和过程调用语句的语义分析 Var id: = E 查符号表;是否有声明? mankind 检查Type(E)? Varid. typer ◇卩(日1e 查符号表;是否有声明? routkind? ParamT Para: Formkind e.Kind ParamT Para; FormType e; Type n? Length( Param)
赋值和过程调用语句的语义分析 ❖ Varid:= E: 查符号表;是否有声明? varKind ? 检查Type(E)? Varid.tyPtr ❖ p(e1…en): 查符号表;是否有声明? routKind? Param.Parai.Formkind ? ei.Kind Param.Parai.FormType ? ei.Type n?Length(Param)
结构语句的语义分析 分析重点:对标号语句的局部化的处理 分析过程:进入结构语句时建立本层LDE和 LUSE表,结束时删除本层LDE和LUSE表。 ◆问题:结构语句结束符对应多个结构语句 结束。 解决办法:对结构化语句重新定义,使得 每个结构化语句都自带结束符
结构语句的语义分析 问题:结构语句结束符对应多个结构语句 结束。 解决办法:对结构化语句重新定义,使得 每个结构化语句都自带结束符。 分析重点:对标号语句的局部化的处理 分析过程:进入结构语句时建立本层LDEF和 LUSE表,结束时删除本层LDEF和LUSE表
修改后的结构语句 Statement=F Expr Then Statement Fl Statement=)F Expr Then Statement ELSE Statement FI Statement=)WHILE Expr Do Statement OD Statement-)for Do Statement OD Statement-begin Statemenlist END
修改后的结构语句 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
总结 符号表: 标识符、类型、值的表示: 局部化处理方法: 类型的语义分析 主要工作: 程序的语义分析 声明部分: 工作重点: 表达式、语句部分:分析过程
总结 符号表: 标识符、类型、值的表示: 局部化处理方法: 类型的语义分析: 主要工作: 程序的语义分析: 声明部分: 表达式、语句部分: 工作重点: 分析过程: