开发者社区> marsCatXDU_李经纬@西电> 正文

编译原理笔记7:语法分析(1)语法分析器的任务、语法错误的处理

简介:
+关注继续查看

语法分析器是编译器前端的核心

7_1
语法分析器的两项主要任务,分别:

  1. 是根据词法分析器提供的记号流,为语法正确的输入构造分析树(或语法树);
  2. 检查输入中的语法 / 词法错误,并调用出错处理程序进行相应的处理。

语法错误的处理

源程序中的错误可以分为词法/语法错误、语义错误两类。前者主要形式是命名不合法、关键字书写错误、语法结构有问题(比如缺分号、该配对的东西不配对)等;后者则可分为静态/动态两种,静态例如类型使用错误、参数使用错误等,动态语义错误则是无穷递归这类逻辑性的问题。

语法错误的处理目标
  1. 不多不漏地报告所有错误出现的准确位置;
  2. 发现一个错误后能够继续分析,做到一次分析完整个程序,再一次性指出所有错误;
  3. 尽量小地降低分析速度(分析速度和扫描遍数有关)。
语法错误的基本恢复策略
  1. 紧急恢复:抛弃掉一些输入,直到遇到同步记号;
  2. 短语级恢复:对错误进行串替换,纠正错误;
  3. 出错产生式:用出错产生式捕捉(预测)错误;
  4. 全局纠正:找到和错误输入序列 x 最相近的序列 y,然后用 y 替换掉 x 。

例如:

 x = a+b
 y = c+d;

紧急恢复:x = a+b+d; // 丢弃掉 b 后的记号,直到遇到 +

短语级恢复: x = a+b; // 加入分号

在写程序时,要养成减少错误的好习惯:每次用变量、参数时,要在使用之前进行初始化,并在直接使用之前检查一下是否出现值为空等问题,防止出现不可预知的错误

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring Security笔记:登录尝试次数限制
今天在前面一节的基础之上,再增加一点新内容,默认情况下Spring Security不会对登录错误的尝试次数做限制,也就是说允许暴力尝试,这显然不够安全,下面的内容将带着大家一起学习如何限制登录尝试次数。
1398 0
阿里本地生活EMonitor根因分析大揭秘
阿里集团针对故障处理提出了“**1/5/10**”的目标-- 1 分钟发现、5 分钟定位、10 分钟恢复,这对我们的定位能力提出了更高的要求。
2490 0
Spring Security笔记:自定义登录页
以下内容参考了 http://www.mkyong.com/spring-security/spring-security-form-login-example/ 接上回,在前面的Hello World示例中,Spring Security为我们自动生成了默认登录页,对于大多数项目而言,如此简单的...
1008 0
Spring Security笔记:使用BCrypt算法加密存储登录密码
在前一节使用数据库进行用户认证(form login using database)里,我们学习了如何把“登录帐号、密码”存储在db中,但是密码都是明文存储的,显然不太讲究。这一节将学习如何使用spring security3新加入的bcrypt算法,将登录加密存储到db中,并正常通过验证。
1843 0
Spring Security笔记:Remember Me(下次自动登录)
前一节学习了如何限制登录尝试次数,今天在这个基础上再增加一点新功能:Remember Me. 很多网站,比如博客园,在登录页面就有这个选项,勾选“下次自动登录”后,在一定时间段内,只要不清空浏览器Cookie,就可以自动登录。
1344 0
IDA反汇编/反编译静态分析iOS模拟器程序(五)F5反编译
反编译是IDA最让人振奋的功能,它的本质是IDA的一个插件,不过会被当做hex-rays的另一个产品。既然是产品,那当然就另外收费,demo版是没有的。
1234 0
IDA反汇编/反编译静态分析iOS模拟器程序(二)加载文件与保存数据库
启动windows版的IDA,在Quickstart界面点击New,弹出一个对话框选择文件。也可以按取消后再把文件拖进IDA。由于Mac版的IDA没注册,没有save功能,所以只好先把Mac上的东西拷贝到windows再打开了。
1139 0
19
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载