编译原理

步骤

  • 词法分析
  • 语法分析
  • 语义分析与中间代码产生
  • 优化
  • 目标代码生成

文法

  • 3型文法:正则文法,用于描述程序设计语言词法的有效工具
  • 2型文法:上下型无关文法,描述程序语法的有效工具

产生式

A -> B
B -> BC|C
C -> 0|1|2|3|4|5|6|7|8|9
推导与规约
A -> aBc
B -> b
==================
aBc是abc的归约
abc是aBc的推导
规范推导/规约

规范推导:最右推导

规范规约:最左规约

无符号串
=》数字串
=》数字串+数字
=》数字串6
=》数字6
=》56
句型

由产生式到最终状态之间的中间串

例如<数字>9

句子

产生式最终匹配的终态

例如56是文法无符号整数的一个句子

词法分析

有限自动机
DFA

确定有限自动机:每个状态在接收下一个输入,只会转移到唯一一个下一个状态

complier-dfa
L(M):代表由FA能够识别的所有字符串的总体

NFA

非确定有限自动机,自动机中含有某些状态,在接收下一个输入后,会转移到多于一个的状态

complier-nfa

NFA确定化

每个NFA都存在一个DFA,使得L(NFA) = L(DFA),也就是说等价

NFA的确定化就是,从NFA转变为DFA的过程

  • c-closure(state):c-闭包,从一个状态转移不需要通过输入可以直接转移到下一个状态的集合
  • move(state, action):从状态state,通过action,转换到的下一个状态的集合
  • a弧转换的闭包:I = c-closure(move(state, action))

子集构造法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sideDoGL-1594611776650)(http://upload-images.jianshu.io/upload_images/24077087-6f91da5d1ba4bd27.PNG)]
然后把I列表标记为状态,并画出DFA

在NFA->DFA后,得到的DFA并不是最简的,必须通过DFA最简化处理,来提高分析的效率

DFA最简化
  • 多余状态:从开始状态出发无法到达的状态
  • 死状态:从此状态出发无法到达最终状态的状态
  • 无关状态:多余状态+死状态
  • 等价状态(不可区别状态):当两个状态,输入任意action,都转移到相同的状态时,代表这两个状态是等价的。

简化步骤为:

  • 消除无关状态
  • 合并等价状态
正则与NFA的转换
R->NFA

complier-r2nfa

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值