
编译原理学习
文章平均质量分 81
Tiantangbujimo7
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
3.4 词法分析 --- DFA的代码表示
DFA 的代码表示 概念上讲,DFA是一个有向图 实际上有不同的DFA的代码表示 转移表(类似于邻接矩阵) 哈希表 跳转表 … 取决于在实际实现中,对时间空间的权衡 转移表: 这个表的行,是所有字符,比分a,b,c,… 这个表的列,是所有状态, q0,q1 可以编码成 2 * 3的矩阵 char table[M][N] //默认256 M,N 是确定的 M是构造DFA不同状态的个数, N 是...原创 2020-04-27 17:36:03 · 1460 阅读 · 0 评论 -
3.2-3.3 词法分析---NFA转换到DFA~DFA 最小化 Hopcroft 算法
子集构造算法: 因为NFA不适合直接用来做词法分析器的识别,是因为它的状态转移是不确定的,这种情况下写一个算法往往需要回溯,对于分析的效率影响会比较大,所以需要用子集构造算法由NFA将它转换成与它等价的DFA(因为DFA是确定有限状态自动机),最终转换成词法分析器可以使用的代码。 子集构造算法思想: a(b|c)* 下图是一个NFA,很明显它的转移边包含 ε 所以它的状态转移是不确定的,我们所要做...原创 2020-04-23 18:33:40 · 1104 阅读 · 0 评论 -
3.1 词法分析 --- 从正则表达式到非确定有限状态自动机
回顾:自动生成 我们想要有一个词法分析器的自动生成器(也就是一个工具)来自动生成这个词法分析器,那么程序员只需要写一个声明式的规范(例如正则表达式),作为一个规范来描述所有词法单元的规则,然后就会有这样的工具来帮我们生成出一个词法分析器出来,它典型的是一个 DFA。 那么这个自动语法生成工具的内部工作流程图下图所示: RE(正则表达式) -> NFA(非确定的有限自动机) ->...原创 2020-04-23 10:17:22 · 983 阅读 · 0 评论 -
2.4 有限状态自动机
有限状态自动机(FA) 从数学上来讲:我们可以把它看成一个有输入输出接口的模块或者系统它可以接受一个输入的字符串,作为输出的话,它可以回答 Yes 或者 No,也就是这个有限状态自动机它能不能接受或者识别你给他提供的这样一个字符串,如果能的话就回答Yes否则的话它就回答No 我们可以使用一个元组来描述这个有限状态自动机 M 自动机的数学概念: M = (∑,S,q0,F,ε) ∑ 是字母表 S...原创 2020-04-22 17:03:20 · 558 阅读 · 0 评论 -
2.3 词法分析の正则表达式
引: 算数表达式 1,2,3 算符 + - * / 由这些来构造更复杂的表达式 1+2+3 … 正则表达式: 对给定字符集 ∑ = { c1,c2,…,cn}; ∑ 由要编译的语言决定,如果在编译的语言是C语言,那么∑ 是ASCII 如果要编译的语言是Java 那么∑ 是Unicode … 但作为数学语言的抽象性,我们就把 ∑ 给抽象作为公共的字符集定义。 归纳定义(1,2 可以看作一个基本...原创 2020-04-22 16:44:46 · 411 阅读 · 0 评论 -
2.1~2.2词法分析的任务,词法分析器的手工构造
编译器的阶段: 阶段: 编译器可以分成若干个阶段,包含 frontend(前端) , backend(后端)。 前端接收源程序,产生中间表示 IR,它处理的是和源语言程序相关的属性。 后端接收中间表示,继续生成目标程序,处理一般是具体的结构和目标机器相关的数据 我们把这部分成为编译器的阶段划分。 前端: 例如: c 语言程序[源程序] ,传入字符流,经过词法分析器,到记号流 ,记号...原创 2020-04-22 16:39:53 · 1098 阅读 · 0 评论 -
1.2 编译器的高层结构
编译器的高层结构 编译器是一个具有非常 模块化 的高层结构。 input---->[C]---->out --> 前端:处理和输入相关部分,比方语言,语法规则约束条件。(词法分析,语法分析 后端:目标机器指令集,约束,前端语法结构怎么映射到指令集。(指令生成,指令优化 input --> [前端 ---> 后端] ---> out 抽象的多个阶段(phase...原创 2020-04-22 16:19:44 · 347 阅读 · 0 评论 -
编译器概述
什么是编译器: 编译器是一个程序,核心功能是把 源代码 翻译成 目标代码 。 源代码: c/c++,Java,c#,html,sql,… 目标代码: x86,IA64,ARM,MIPS,… 编译器的核心功能: 源代码经过编译器的翻译,生成了目标代码,这里的静态计算意思是编译器在对目标程序进行编译的过程中并不去执行这个代码,而是 尝试以静态的方式对目标程序进行理解,理解的原因是编译器所生成的目标...原创 2020-04-22 16:05:25 · 1122 阅读 · 0 评论