美文网首页
编译器笔记2-绪论-词法与语法与语义分析(概述)

编译器笔记2-绪论-词法与语法与语义分析(概述)

作者: 衣忌破 | 来源:发表于2019-11-01 17:54 被阅读0次

词法分析

词法分析器.png
  • 词法分析的主要任务

从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。将识别出的单词转换成统一的机内表示——词法单元 (token) 形式 token:<种别码,属性值>

图片.png
  • 例子 词法分析后得到的token序列
词法分析.png

其中 while ( != ) ++ ; } 都是一词一码的单词,因此对于的token第二个值都是空的 - 。

语法分析

语法分析.png

语法分析器(parser)从词法分析器输出的token序列中识别出各类短语 ,并构造语法分析树(parse tree)。

语法分析树描述了句子的语法结构

语法结构.png
  • 语法分析树
  1. 例子 赋值语句的分析树
position = initial + rate * 60;
<id, position> <=> <id,initial> <+> <id, rate> <*> <num,60> <;>
分析树.png
  1. 例子 变量声明语句的分析树
D = Declaration
T = Type
IDS = Identify Sequence
分析树.png

语义分析

语义分析.png

语义分析的主要任务

  • 收集标识符的属性信息
  1. 种属(Kind)
    简单变量、复合变量(数组、记录、… )、过程…

  2. 类型
    整型、实型、字符型、布尔型、指针型…

  3. 存储位置、长度

存储位置、长度.png
  1. 作用域

  2. 参数和返回值信息
    参数个数、参数类型、参数传递方式、返回值类型、…

符号表
语义分析阶段收集的这些标志服信息,都会存放在符号表中。

符号表.png

字符串标这种设计比较灵活,因为每个name的字符串长度是不一致的。

  • 语义检查
  1. 变量或过程未经声明就使用
  2. 变量或过程名重复声明
  3. 运算分量类型不匹配
  4. 操作符与操作数之间的类型不匹配

数组下标不是整数
对非数组变量使用数组访问操作符
对非过程名使用过程调用操作符
过程调用的参数类型或数目不匹配
函数返回类型有误

相关文章

  • 编译器笔记2-绪论-词法与语法与语义分析(概述)

    词法分析 词法分析的主要任务 从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。将识别出的单词转换成统...

  • 编译原理三——语义分析

    语义分析和中间代码生成 1、概述 1、和语法分析、词法分析的同时进行进行词法检查、语法检查一样,语义分析也伴随语义...

  • 静态链接

    编译和链接 预处理 编译扫描(词法分析)、语法分析、语义分析(静态语义是编译器所能分析的,动态语义要在运行期才能确...

  • 编译器的工作过程

    编译器的工作过程划分为:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。 词法分析器的任务是把...

  • 编译原理-语法分析学习笔记

    语法分析的目的 词法分析与语法分析处于编译器的前端,对输入的源程序进行分析。词法分析,类似于将语句切分为关键字...

  • Java常见面试题汇总-----------JVM专题(JVM编

    32、JVM编译器优化 32.1、JVM编译的过程   1、解析与填充符号表过程  1)、词法、语法分析  词法分...

  • 编译器做了什么

    词法分析 语法分析 语义分析 中间语言生成 目标代码生成与优化 其中包括六个步骤:1. 扫描 2. 语法分析 3....

  • 编译原理基础知识汇总

    前端: 词法分析 -> 语法分析 -> 语义分析后端: 生成中间代码 -> 优化 -> 生产目标代码 词法分析:有...

  • 【MOOC:编译原理】第一章 编译概述

    第一讲 编译器概述 第二讲 编译器结构 编译器具有非常模块化的高层结构 前端:词法分析, 语法分析 后端:指令生成...

  • 六、JVM之编译于代码优化

    编译器优化 把.java->.class的过程 一、Javac编译器 1) 解析与填充符号表 1.词法、语法分析 ...

网友评论

      本文标题:编译器笔记2-绪论-词法与语法与语义分析(概述)

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