




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
*1* 编 译 原 理 * S.P O.P 语义分析、生成中间代码 生成目标程序 代码优化 语法分析程序 词法分析程序 错 误 处 理 符 号 表 管 理 *2* 编 译 原 理 * 第6章 符号表管理和错误处理 1. 明确符号表的作用、内容、组织 2. 明确错误处理的两种方法:错误校正和局部化处理 教学目标 *3* 编 译 原 理 * 6.1 符号表管理 6.2 错误处理 6.3 PL/0编译程序的错误处理 教学内容 *4* 编 译 原 理 * 编译程序中使用最多的数据结构是表 源程序中的各种信息,以便查询或修改 在这些表中,尤以符号表最为重要 生存期最长 使用最为频繁 6.1 符号表管理 *5* 编 译 原 理 * 6.1.1 符号表的作用和内容 作用: (1)收集符号的各种信息 (2)语义检查的依据 (3)目标代码生成阶段地址分配的依据 内容:名字栏信息栏 *6* 编 译 原 理 * 6.1.2 符号表的组织 操作: (1)向表中填入一个新标识符。 (2)对于给定一个标识符: 查找是否在表中; 访问它在表中的相关信息; 在表中填写或更新它的某些信息。 (3)更新或删除一个或一组无用的项。 *7* 编 译 原 理 * 6.1.2 符号表的组织 符号表的总体组织: (1)多张 (2) 一张 (3)前两种的折中 符号表项的组织: (1)线性组织 (2)排序组织 (3)散列组织:效率高,为多数编译程序采用 *8* 编 译 原 理 * Hash表的基本思想是: p为符号表设置一个足够大的空间M p为符号构造一个散列函数Hash(Ki),使得0 Hash(Ki) M-1,i=1,2,n p这样查找Ki时,Hash(Ki)就决定了Ki在符号表中 的位置 *9* 编 译 原 理 * 构造Hash函数的方法: p将标识符中的每个字符转换为一个非负整数 p将得到的各个整数组合成一个整数(可以将第一 个、中间的和最后一个字符值加在一起,也可以将 所有字符的值加起来) p将结果数调整到0M-1范围内,可以利用取模的方 法,Ki%M(M为素数) *10* 编 译 原 理 * 解决地址冲突的方法: 由于用户定义标识符的随机性,Hash函数值在0M-1范围内 不一定唯一 若两个标识符具有相同的函数值,则可用开放地址法或链地 址法解决冲突,有关内容可以参考数据结构的教材。 *11* 编 译 原 理 * 词法错误 语法错误 语义错误 违反了语言的环境限制 数组维数太大 循环嵌套层数太多 6.2 错误处理 *12* 编 译 原 理 * 词法错误、语法错误和语义错误 词法错误:不合法单词 例:mian( ) int 3sum; 语法错误:源程序在语法上不符合文法 例:Ax , y =B+*C *13* 编 译 原 理 * 超越系统限制:(计算机系统和编译系统) 1. 数据溢出错误,常数太大,计算结果溢出。 2. 符号表、静态存储分配数据区溢出。 3. 动态存储分配数据区溢出。 语义规则 1. 标识符先说明后引用 2. 标识符引用要符合作用域规定 3. 过程调用时实参与形参类型一致 4. 参与运算的操作数类型一致 5. 下标变量的下标不能越界 语义错误主要包括:程序不符合语义规则或 超越具体计算机系统的限制 *14* 编 译 原 理 * 错误处理方法有两种: 错误校正法: 根据文法进行错误改正 错误局部化法: 把错误的影响限制在一个局部的范围,避免 错误扩散和影响程序其他部分的分析 *15* 编 译 原 理 * 错误局部化法 词法分析:发现不合法字符,显示错误,并跳 过该标识符(单词)继续往下分析。 语法语义分析:跳过所在的语法成分(短语或语 句),一般是跳到语句右界符, 然后从新语句继续往下分析。 *16* 编 译 原 理 * 错误局部化处理的实现(递归下降分析法) err: 全局变量,存放错误信息。 用递归下降分析时,如果发现错误,便将有关 错误信息(字符串或者编号)送err,然后转错 误处理程序; 出错程序先打印或显示出错位置以及出错信息 ,然后跳出一段源程序,直到跳到语句的右界符 或正在分析的语法成分的合法后继符号为止,然 后再往下分析。 *17* 编 译 原 理 * if_ statement( ) getsym( ); /*读下个单词符号*/ C( ) ; /*表达式处理程序*/ if not sym=“then” err :=“缺then” ; error( ); /*出错处理程序*/ else getsym( ); statement( ); if sym=“else” getsym( ); statement( ); if then else; error( ) printf(linecnt, err); do getsym( ); while(sym!=“;” or sym!=“end” ) 发现错误立即跳到语句结尾 处(语句右界符 ; 或end),这 样处理较粗糙,将跳过太多; 上例中,缺then,就将跳过整个 条件语句,使得then后的语句 都被跳过而不分析,其中有错 误就发现不了 *18* 编 译 原 理 * (3) 提高错误局部化程度的方法 设 S1: 合法后继符号集 (某语法成分的后继符号) S2: 停止符号集 (跳读必须停止的符号集) error(S1,S2 ) printf(linecnt, err); do getsym( ); while(sym not in S1 or not in S2 ) 若有错,则可跳到then 若statement有错,则可跳到else if then else; *19* 编 译 原 理 * 6.3 PL/0编译程序的错误处理 错误局部化处理遵循以下两条原则。 (1)镇定原则 (2)关键字原则 在进入某个语法单位时,调用test检查当前符号是否属 于该语法单位的首符号集。若不属于,则滤去首符号和 后继符号集合外的所有符号。 在语法单位分析结束时,调用test,检查当前符号是否 属于调用该语法单位时应有的后继符号集合。若不属于 ,则滤去后继符号和首符号集合外的所有符号。 *20* 编 译 原 理 * test过程有三个参数:s1、s2、n S1:可允许的下一个符号集合,如果当前符 号不在此集合中,当即得到一个错误号; S2:另加的停止符号集合,在某上出错状态 下,可恢复语法分析继续正常工作的补充单词 符号集合; 整数n,表示有关错误的诊断号。 *21* 编 译 原 理 * 在进入某个语法单位时,调用TEST滤去 开始符号前的所有符号。 在语法单位分析结束时,调用TEST滤去 当前符号到后继符号之间的所有符号。 TEST TEST *22* 编 译 原 理 * 开始符号集合与后继符号集合 *23* 编 译 原 理 * TEST测试过程流程图 *24* 编 译 原 理 * void factor(fsys) struct node *fsys; void expression(); int m=0,n=0,i; char *tempset =“rpsren“,NULL; struct node *temp; temp=(struct node*)malloc(sizeof(struct node); while(tempsetm!=NULL) temp-pan+=tempsetm+; temp-pan=NULL; test(facbegsys,fsys,24); /* 24:表达式的开始符不能是此符号*/ while(in(sym,facbegsys)=1) if(strcmp(sym,“ident“)=0) i=position(id); if(i=0) error(11); else switch(tablei.kind) 因子的处理过程 *25* 编 译 原 理 * case constant: gen(lit,0,tablei.val); break; case variable:gen(lod,lev-tablei.level,tablei.adr); break; case procedur: error(21); break; getsym(); else if (strcmp(sym,“number“)=0) if(numAMAX)error(31); num=0; gen(lit,0,num); getsym(); else if (strcmp(sym,“lparen“)=0) getsym(); expression(add(temp,fsys); if (strcmp(sym,“rparen“)=0) getsym()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械专业理论试题及答案
- 动画专业试题及答案
- 土建专业招聘试题及答案
- 教师招聘专业试题及答案
- 奶茶地摊活动策划方案范文
- 龙湖园林施工方案
- 抗震支架施工方案审核
- 儿童节主题演讲文范
- 2024-2025学年山东省滨州市邹平县七年级(上)期末数学试卷(含答案)
- 山东省青岛市2026届高三上学期期初调研检测语文试卷(含答案)
- 丰都县龙兴坝水库工程枢纽及附属工程
- 《中华民族大团结》(初中)第1课-爱我中华教学课件
- 高纯镁砂的生产技术及生产现状
- 做更好的自己+学案- 部编版道德与法治七年级上册
- 急性会厌炎护理查房
- 大化集团搬迁及周边改造项目污染场地调查及风险报告
- 医疗机构特种设备安全管理专业解读
- 智能化公共广播系统
- 马克思列宁主义
- 混凝土模板工程验收表(含续表)GDAQ2090202
- 成人癌性疼痛护理-中华护理学会团体标准2019
评论
0/150
提交评论