编译原理 野性酷女 2022-05-10 22:03 364阅读 0赞 ### 目录 ### * 引论 * * 1、编译程序 * * * 编译过程 * 2、解释程序 * 3、文法 * 4、句型的分析 * * * (1)、自顶向下的分析方法——推导 * (2)、自底向上的分析方法——规约 * 5、有穷自动机 * * * (1)确定的有穷自动机(DFA) * (2)不确定的有穷自动机(NFA) # 引论 # ## 1、编译程序 ## 编译程序是现代计算机基本组成部分之一,而且多数计算机系统都配有不止一种高级语言的编译程序,对有些高级语言设置配置了几个不同性能的编译程序。 从功能上看,一个编译程序就是一个语言翻译程序。语言翻译程序把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价程序。 编译程序的基本任务是将源语言程序翻译成等价的目标语言程序。 #### 编译过程 #### 1. **词法分析**:从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。 2. **语法分析**:在词法分析的基础上将单词序列分解成各类语法短语。语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。(词法分析和语法分析本质上都是对源程序的结构进行分析) 3. **语义分析**:审查源程序有无语义错误,为代码生成阶段收集类型信息。 4. **中间代码生成**:是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;而是容易将它翻译成目标代码。 5. **代码优化**:对前一阶段产生的中间代码进行变化或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。 6. **目标代码生成**:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。 ![在这里插入图片描述][70] ## 2、解释程序 ## 它不需要在运行前先把源程序转换成目标代码,就可以实现在某台机器上运行程序并生产结果。解释程序接受某个语言的程序并立即运行这个源程序。它的工作模式是一个个的获取、分析并执行源程序语句,一旦第一个语句分析结束,源程序便开始运行并且生成结果。 ## 3、文法 ## 乔姆斯基把文法分成4种类型,即0型、1型、2型和3型。文法G定义为四元组(Vn,Vt,P,S)。 * Vn:非终结符的集合,用大写字母表示 * Vt:终结符的集合,用小写字母表示 * P:为规则(α→β)的集合,即产生式的集合 * S:称作识别符或开始符,它是一个非终结符 1. **0型文法**:也成短语文法。设G=(Vn,Vt,P,S)为一个文法,如果它的产生式α→β 是这样一种结构:α∈(Vn ∪ Vt)\* 且至少含有一个非终结符,而 β∈(Vn ∪ Vt)\* ,则是一个0型文法。它的能力相当于图灵机。(对0型文法产生式的形式作某些限制,以给出1型、2型和3型文法的定义) 2. **1型文法**:设G=(Vn,Vt,P,S)为一个文法,若P中的每一个产生式α→β 均满足 |β|≥|α|,仅仅S→ɛ除外,则文法G是1型或上下文有关的。它的能力相当于限行界限自动机。 3. **2型文法**:设G=(Vn,Vt,P,S)为一个文法,若P中的每一个产生式α→β 满足:α是一个非终结符,β∈(Vn ∪ Vt)\* ,则此文法称为2型的或上下文无法的。它的能力相当于下推自动机。 4. **3型文法**:设G=(Vn,Vt,P,S)为一个文法,若P中的每一个产生式的形式都是 A→aB(右线性,A→Ba称为左线性) 或 A→a,其中A和B都是非终结符,a∈Vt\*,则G是3型文法或正规文法。它的能力相当于有限状态自动机。 ## 4、句型的分析 ## 句型的分析就是识别一个符号串是否为某文法的句型,识别它是不是某文法的句子。句型分析是一个识别输入符号串是否为语法上正确的程序的过程。分析算法分为两大类,即自顶向下和自底向上。 #### (1)、自顶向下的分析方法——推导 #### 是从文法的开始符号出发,反复使用各种产生式,寻找“匹配”于输入符号串的推导。它需要考虑的问题是:如何选择哪一个推导式来进行推导? #### (2)、自底向上的分析方法——规约 #### 是冲输入符号串开始,逐步进行“规约”,直至规约到文法的开始符号。它需要考虑:如何识别可规约的串? ## 5、有穷自动机 ## #### (1)确定的有穷自动机(DFA) #### 1. 初态唯一 2. f是一个单值映射 3. 任意状态射出弧上的标记都不相同 4. 任意状态至多只有n条射出弧 5. 若DNA能识别ɛ,则初态也是终态 #### (2)不确定的有穷自动机(NFA) #### 1. 初态不唯一 2. f是一个多值映射函数 3. 同一状态射出弧上的标记可相同 4. 任一状态可以有多于n条射出弧 5. 允许初态也是终态 [70]: /images/20220511/876c263399184093934f7809e6655c8b.png
相关 编译原理 第一章: 编译过程的六个阶段:词法分析,语法分析,语义分析,中间代码生成, 代000码优化,目标代码生成 解释程序:把某种语言的源程序转换成等价的另一种语言程序——目标语 清疚/ 2023年10月29日 07:49/ 0 赞/ 283 阅读
相关 编译原理(三) 编译原理(三) 词法分析 算法 词法分析 1. 正则式 正则式也称正规式,下面是正则式及其所表示的正则集的递归定义: 设字母 矫情吗;*/ 2023年10月10日 10:06/ 0 赞/ 65 阅读
相关 编译原理(四) 编译原理(四) 语法分析 语法分析 1. FIRST集合 F I R S T ( α ) = \{ a ∣ α ⇒ ∗ a … , a ∈ 一时失言乱红尘/ 2023年10月09日 12:31/ 0 赞/ 25 阅读
相关 编译原理 第一章 编译系统概论 单元测验1 1、 问题:编译过程中,语法分析器的任务不包括( ) 选项: A:分析单词是怎样构成的 B:分析单词串是如何构成语句和说明的 妖狐艹你老母/ 2022年10月22日 10:58/ 0 赞/ 307 阅读
相关 Javac编译原理 Javac编译原理 转载来源:http://www.cnblogs.com/wade-luffy/p/5925728.html 1概述 忘是亡心i/ 2022年07月10日 04:30/ 0 赞/ 351 阅读
相关 【编译原理】编译原理简单介绍 编译原理简单介绍 -------------------- 编译原理简单介绍 什么叫编译程序 翻译 柔光的暖阳◎/ 2022年06月16日 05:17/ 0 赞/ 741 阅读
相关 javac编译原理 [Javac编译原理][Javac] java源代码(符合语言规范)-->javac-->.class(二进制文件)-->jvm-->机器语言(不同平台不同种类) 如何 客官°小女子只卖身不卖艺/ 2022年06月13日 10:10/ 0 赞/ 297 阅读
相关 编译原理总结 学了一学期的编译原理,一开始上课的时候,感觉老师嘴里的概念明明说的那么顺溜,可是到自己这就卡壳了,让我想起了一个梗:要考试了,在复习的时候,打开书,马冬梅,恩记住了,合上书 我不是女神ヾ/ 2022年05月22日 01:13/ 0 赞/ 235 阅读
相关 编译原理1 本学期学习编译原理,挺难的,但只要搞懂了会发现挺有意思的,分享一下自己学习整理的笔记。 编译原理是程序员的基础课之一,希望大家也要努力学好,加油加油!!! 建议放大看![w 淡淡的烟草味﹌/ 2022年04月24日 11:28/ 0 赞/ 251 阅读
还没有评论,来说两句吧...