thunder_sword's blog thunder_sword's blog
来看漫画丫~
首页
分类
标签
归档
GitHub

thunder-sword

网安界的小菜鸡
来看漫画丫~
首页
分类
标签
归档
GitHub
  • 引论
    • 1.词法分析/扫描(Scanning)
    • 2.语法分析(Parsing)
    • 3.语义分析
      • 3.1.收集标识符的属性信息
      • 3.2.语义检查
    • 4.中间代码生成
      • 4.1.常用的中间表示形式
      • 4.2.三地址码:
      • 4.3.中间代码生成的例子
  • 语言及其文法
  • 词法分析
  • 自顶向下语法分析方法
  • 自底向上优先分析
  • LR分析方法
  • 编译原理
thunder-sword
2021-10-12

引论

# 1.编译过程

image-20210902122428893

# 2.编译器在语言处理系统中的位置

image-20210902123019351

# 3.英汉翻译例子

1.词法分析

2.语法分析

3.语义分析

image-20210902123320190

image-20210902123404720

# 4.编译器结构

image-20210902123536393

其中此法分析、语法分析、语义分析常常可以一起实现,共称为“语法制导翻译(Syntax Directed Translation)”

image-20211012085728032

# 1.词法分析/扫描(Scanning)

image-20210902123718940

例子:

image-20210902123754927

# 2.语法分析(Parsing)

image-20210902124144743

例子1:变量声明语句的分析树

image-20210902124444102

例子2:变量声明语句的分析树

image-20210902124640961

# 3.语义分析

主要任务:

# 3.1.收集标识符的属性信息

  • 种属(Kind)
  • 类型(Type)
  • 存储位置、长度
  • 值
  • 作用域
  • 参数和返回值信息 ➢参数个数、参数类型、参数传递方式、返回值类型、..

每一个标记符的各种信息都存在符号表中,同时带着一个字符串表存储标识符的名字,如下:

image-20210902125205260

只是将字符串地址存在符号表中的好处是节省空间,因为只需要固定长度的字符串地址就可以,而不用取最长的字符串长度来做列长;同时也方便了多次利用和修改。

# 3.2.语义检查

➢变量或过程未经声明就使用 ➢变量或过程名重复声明 ➢运算分量类型不匹配 ➢操作符与操作数之间的类型不匹配 ➢数组下标不是整数 ➢对非数组变量使用数组访问操作符 ➢对非过程名使用过程调用操作符 ➢过程调用的参数类型或数目不匹配 ➢函数返回类型有误

# 4.中间代码生成

# 4.1.常用的中间表示形式

  • 三地址码(Three-address Code)

    三地址码由类似于汇编语言的指令序列组成,每个指令最多有三个操作数(operand)

  • 语法结构树/语法树(Syntax Trees)

# 4.2.三地址码:

image-20210902130212764

三地址指令的表示方法有以下三种:

  1. 四元式(Quadruples),格式为(op,y,z,x)
  2. 三元式(Triples)
  3. 间接三元式(Indirect triples)

四元式例子:

image-20210902130422726

# 4.3.中间代码生成的例子

image-20210902130506352

语言及其文法

语言及其文法→

最近更新
01
计算机系统的硬件结构
10-12
02
计算机系统概论
10-12
03
进程
10-12
更多文章>
Theme by Vdoing | Copyright © 2019-2021 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×