编译原理1----编译原理的基本概念

编译程序:把一种语言(源语言===高级语言)转换成另一种语言(目标语言===低级语言(汇编或者机器语言))的程序。

词法分析:对输入的字符串进行扫描和分解,识别出一个个单词及其类型;(输入是字符串,输出是<单词的种类标示符,单词的值>)

语法分析:对输入的字符串进行语法单位的识别,判断他是一个赋值语句还是一个表达式(输入是程序串,输出是是否是合法的语法单位)

语义分析与中间代码的产生:对输入的程序串进行语法的检查,并且合法的话进行初步的翻译。(输入是语法单位,输出是翻译的初步代码)

优化器:对于初步翻译得到的代码进行再次的扫描和翻译,去掉冗余。(输入是初步的翻译结果,输出是优化后的代码)

目标代码生成器:对于优化后的代码进行再次翻译,生成符合机器的最终代码。(输入是优化后的代码,输出是符合机器的目标代码)

表格和表格管理:每个阶段都会有相应的表格记录各类信息以及编译的进展状况。

出错处理:当编译的过程中有错误出现的时候应当有报错处理,具体的地点,原因,并且使得范围尽量的小,使源程序的其余部分继续执行。

遍:就是对源程序或者源程序的中间结果进行从头到尾的扫描依次,并且作出相应的处理,生成新的中间结果或者目标程序。次法分析相当于一遍,语法分析相当于一遍,但是词法、语法可以合为一遍,根据自身的内存情况而定。内存大的时候可以少几遍。因为遍数多了也是会浪费输入输出时间的。

闭包:V^n=VVVVV....V     规定V^0={e}(这里的e就是空的意思)。

V*=V^0UV^1UV^2...(其中V*是V的闭包)相当于你从0到n都被我承包了。

文法:定义一组的规则产生式的集合,如:G:

E->i

E->E+E

E->E*E

E->(E)

称为文法。其中的每一条即为产生式。

一组产生式是一个四元式(VT,VN,S,p),终结符号,非终结符号,开始符号,一组产生式。

句型:由开始符号推导出的一个串是句型,如:s-*>a;a是一个句型,如果a中只含终结符,a为句子。E->E*E中E*E是一个句型,E->i中i也是一个句型,同时也是一个句子。E的所有句子是一个语言。

语法树:句型的推导过程就是一颗语法树。

二义性:是指对于一种推导有多中不同的结果,而不是分别最左推导和最右推导有不同的结果。

时间: 2024-11-05 18:42:19

编译原理1----编译原理的基本概念的相关文章

编译原理 (预处理&gt;编译&gt;汇编&gt;链接)(转)

一般高级语言程序编译的过程:预处理.编译.汇编.链接.gcc在后台实际上也经历了这几个过程,我们可以通过-v参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用-E,-S,-c和 -O,对应的后台工具则分别为cpp,cc1,as,ld.下面我们将逐步分析这几个过程以及相关的内容,诸如语法检查.代码调试.汇编语言等. 1.预处理 预处理是C语言程序从源代码变成可执行程序的第一步,主要是C语言编译器对各种预处理命令进行处理,包括头文件的包含.宏定义的扩展.条件编译的选择等.打印出预处理之

记事本写c#代码编译并理解编译执行原理

1.在记事本里编写c#代码,将文件保存为ProgramTest.cs: namespace huangxiangTestDemo { class ProgramTest { static void Main() { System.Console.WriteLine("hello world"); System.Console.ReadKey(); } } } 2.在控制台编译,使用csc命令编译: 注意完整写法:csc.exe /out:ProgramTest.exe /t:exe /

浅谈VB.Net 程序的编译和动态编译

---恢复内容开始--- 一般,我们都是通过Visual Studio(下面简称vs)来编写和编译vb.net应用程序的,但是,不少的人并不知道vs是通过何种方式编译程序的.今天,我们就来探讨一下编译vb.net程序的真正原理. 这篇随笔包含如下几个部分: 1.VS是怎么编译的 2.通过vbc.exe来编译应用程序 3.在代码中通过VBCodeProvider动态编译应用程序 ok,首先来说说vs编译应用程序的方法.其实,vs是通过调用vbc.exe来编译vbnet应用程序的.vs把用户编写的代

Javac编译和JIT编译

编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解释执行,如JavaScript),而下面的那条分支就是传统编译原理中从源代码到目标机器代码的生成过程. 如今,基于物理机.虚拟机等的语言,大多都遵循这种基于现代经典编译原理的思路,在执行前先对程序源码进行词法解析和语法解析处理,把源码转化为抽象

【深入Java虚拟机】之七:Javac编译与JIT编译

转载请注明出处:http://blog.csdn.net/ns_code/article/details/18009455 编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解释执行,如JavaScript),而下面的那条分支就是传统编译原理中从源代码到目标机器代码的生成过程. 如今,基于物理机

javac 编译与 JIT 编译

编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解释执行,如 JavaScript),而下面的那条分支就是传统编译原理中从源代码到目标机器代码的生成过程. 如今,基于物理机.虚拟机等的语言,大多都遵循这种基于现代经典编译原理的思路,在执行前先对程序源码进行词法解析和语法解析处理,把源码转化为抽

Java代码的编译与反编译那些事儿

编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Programming Language)分为低级语言(Low-level Language)和高级语言(High-level Language). 机器语言(Machine Language)和汇编语言(Assembly Language)属于低级语言,直接用计算机指令编写程序. 而C.C++.Java.Python等属于高级语言,用语句(Statement)编写程序,语句是计算

Java 编译与反编译

编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Programming Language)分为低级语言(Low-level Language)和高级语言(High-level Language). 机器语言(Machine Language)和汇编语言(Assembly Language)属于低级语言,直接用计算机指令编写程序. 而C.C++.Java.Python等属于高级语言,用语句(Statement)编写程序,语句是计算

T-SQL性能调整(一)--编译和重新编译

概念简介 我们平时所说的查询在SQLServer 中主要有两部分来实现: 编译查询,主要包括了五个环节(缓存查找.分析.代数化.优化.缓存新计划) 流程描述: 首先,在计划缓存中查找是否包含新的查询,如果包含则直接交由执行引擎来执行该缓存计划,跳过编译阶段. 其次,如果没有匹配则执行分析阶段(包括参数化.并将SQL文本转化成逻辑树作为下一个阶段的输入), 再次检查缓存后是否包含,包含则交给执行引擎,否则继续下一步. 第三,代数化. 第四,优化并将新计划交给执行引擎. 这里需要有个概念的介绍:执行

Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)

Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装: ? ? ? ? ? ?将一些东西封装到一个地方,你还可以取出来 ? ? ? ? ? ?类设置静态属性, 设置一些方法 或者 对象, 对象可以在其对象封装一些属性 多态: ? ? ? ? ? ?python默认支持多态, 多态指的是一种事务具有多种形态 ? ? ? ? ? ?1.多态可以增加代码的灵活度: ? ? ? ? ? ?2.以继承和重写父类方法为前提: ?