编译原理MOOC笔记


正规文法和正规式

正规式即正则表达式

正规文法为左线性或右线性文法

正规式和正规文法的定义

正规式转换为正规文法

正规文法转换为正规式


词法分析

源程序 -> 前端 -> 中间表示 -> 后端 -> 目标程序

前端

源程序 -> 词法分析器 -> 记号 -> 语法分析器 -> 抽象语法树 -> 语义分析器 -> 中间表示


词法分析器的任务

任务:字符流到记号流

字符流:和被编译的语言密切相关(ASCII,Unicode,or…)
记号流:编译器内部定义的数据结构,编码所识别出的词法单元

词法分析器的实现方法

  1. 手工编码实现法
    相对复杂、且容易出错,但是是非常流行的实现方法(现在的编译器如GCC和LLVM就是手工编码)

  2. 词法分析器的生成器
    快速、代码量少,但是难以控制细节

正则表达式

给定字符集 ∑ = c 1 , c 2 , . . . , c n \sum={c_1,c_2,...,c_n} =c1,c2,...,cn
归纳定义:
1. 空串 ϵ \epsilon ϵ 是正则表达式
2. 对于任意 c ∈ ∑ c\in\sum c, c是正则表达式
3. 如果M和N是正则表达式,则以下也是正则表达式
选择 M ∣ N = { M , N } M | N= \{M, N\} MN={ M,N}
连接 M N = { m n ∣ m ∈ M , n ∈ N } MN = \{mn | m\in M,n \in N \} MN={ mnmM,nN}
闭包 M ∗ = { ϵ , M , M M , M M M , . . . } M*=\{\epsilon , M , MM, MMM, ...\} M={ ϵ,M,MM,MMM,...}

有限状态自动机

自动机={待补充}

字符串分为 可被自动机接受的字符串 和 不可被自动机接受的字符串

可被自动机接受:可达到结束状态
不可被自动机接受:不可达到结束状态

确定的有限状态自动机:对任意字符,最多有一个状态可以转移
不确定的有限状态自动机:对任意的字符,有多于一个状态可以转移

正则表达式到非确定有限状态自动机

词法分析器自动生成的过程:

R E ( 正 则 表 达 式 ) → T h o m p s o n 算 法 N F A → 子 集 构 造 算 法 D F A → H o p c r o f t 最 小 化 算 法 词 法 分 析 器 代 码 RE(正则表达式) \xrightarrow[]{Thompson算法} NFA \xrightarrow[]{子集构造算法} DFA \xrightarrow[]{Hopcroft最小化算法} 词法分析器代码 REThompson NFA

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值