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

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

作者: marsCatXDU_李经纬 | 来源:发表于2020-12-21 10:06 被阅读0次

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

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

  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; // 加入分号

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

相关文章

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

    语法分析器是编译器前端的核心 语法分析器的两项主要任务,分别: 是根据词法分析器提供的记号流,为语法正确的输入构造...

  • python学习干货教程(20):语法错误和异常处理

    Python有两种错误很容易辨认:语法错误和异常。 语法错误: invalid syntax 语法分析器指出了出错...

  • Python 3 学习笔记之——错误和异常

    1. 语法错误 Python 的语法错误被称为解析错,语法分析器会指出出错的代码行,并且在最先找到的错误的位置标记...

  • Python 错误与异常

    错误和异常 语法错误 语法错误, 也被称为解析错误。比如: 语法分析器指出错误行, 并且在检测到错误的位置前面显示...

  • 编译原理概述

    编译器原理 词法分析器 语法分析器 语义分析器 中间代码生成 符号表 独立机器的代码优化器 代码生成器 依赖于机器...

  • 编译原理——语法分析小结(1~3)

    1、语法分析器的作用 语法分析器接收词法分析器提供的记号串,检查它们是否能由源程序语言的文法产生。 典型的...

  • JavaScript预编译详解

    JS的运行分三部:语法分析 ➡️预编译➡️解释执行 语法分析:JS引擎先通篇扫描一遍,查看是否有低级语法错误 (函...

  • PHP核心理解-flex和bison入门

    一般词法分析器和语法分析器会一起使用,语法分析器会调用词法分析器来读取输入,词法分析器匹配到特定的模式后,就向语法...

  • 函数的作用域

    js代码执行的过程: 语法分析:扫描有没有低级的语法错误预编译:解释执行的前期准备阶段解释执行: 函数的预编译过程...

  • 词法分析任务

    词法分析任务 字符流到记号流的转换 可以将整个流程展示如下图: 源程序>词法分析器>记号流>语法分析器>抽象语法树...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/vtuknktx.html