编译原理--reading note

# Compilers Principles
# reading notes
# 2016.02.03
# victor

1 引论

1.1 编译流程

begin: 源程序
        # front end: 与源代码有关
        A.字符流-->[词法分析]-->
        B.符号流-->[语法分析]-->
        C.语法树-->[语义分析]-->
        D.语法树-->[中间代码生成]-->
        # middle end
        E.中间表示形式-->[机器无关代码优化]-->
        F.中间表示形式-->[代码生成]-->
        # back end: 与目标机有关
        G.目标机器语言-->[机器相关代码优化]-->
    end: 目标机器语言

1.1.1 词法分析
    词法分析器读入字符流,将它们组织成有意义的词素,每个词素,用词法单元(token)作为输出.
    词法单元:<token_name,attribute_value>.token_name是一个在语法分析阶段使用的抽象符号,第二个分量指向符号表中关于这个词法单元的条目.
    input example: position = initial + rate * 60;
    analysis:
        position : <id,1> id表示标识符,1表示指向的条目;
        = :        <=> 赋值运算符,属性值省略;
        initial :  <id,2>;
        + :        <+>;
        rate :     <id,3>;
        * :        <*>;
        60 :       <60>;

1.1.2 语法分析

时间: 2024-11-03 01:21:50

编译原理--reading note的相关文章

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

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

gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解

摘自http://blog.csdn.net/elfprincexu/article/details/45043971 gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解 C和C++编译器是集成的,编译一般分为四个步骤: 预处理(preprocessing)  ----------------- cpp/ gcc -E  编译(compilation) ------------------ cc1 / gcc -S 汇编(assembly)  ----------------

thinking in java -----reading note(2)

# thinking in java 4th# reading note# victor# 2016.02.16 chapter 2 一切都是对象 2.1 用句柄操纵对象    使用句柄作为标识符指向一个对象.但拥有句柄并不意味着有一个对象同它连接.    例如,创建一个String句柄: String s;    此时,这里创建的是句柄,并不是对象.如果向s发一条消息,就会获得一个错误.因此,较为安全的做法是:创建一个句柄时,无论如何都进行初始化. 2.2 创建对象    通常使用 new 关

Programming In Scala Reading Note 3

Class and Object class TestClass { val some = 1 } 生成的class文件中会包含一个some()方法,并且这个方法是public的,也就是说类外可以通过类的对象来获取这个some的值 修改: class TestClass { private val some = 1 } 会生成一个private的some()方法,返回值也是some.但是现在类外是访问不到的 类的方法的参数默认是val类型的 副作用大部分用来修改一个属性的值或者开关一个I/O,只

Programming In Scala Reading Note 7

函数和闭包 1 成员方法 java中函数存在的方式,我们给一个类追加一个功能的途径就是给他追加一个方法. 2 本地方法 所谓的本地方法就是存在于一个方法内部的方法. 如果一个类中有一个方法是private的,且只有一个方法使用到他,那么这个方法完全可以被定义为一个本地方法 3 函数式一等公民 方法分为: 1 方法名称 def add 2 方法参数 (a:Int, b:Int) 3 赋值符号 = 4 方法体 a + b 其实,(a:Int, b:Int) => a + b,就构成了一个基本的函数了

编译原理 - 1 手撸状态机词法分析器

感谢vczh轮子叔的坑了的教程,我的编译原理第一次入了个门,词法分析写完了,今后可以看看书继续往下学了. http://www.cppblog.com/vczh/archive/2014/03/02/206014.html 词法分析,就是对于一段代码,把他们分割成一个个的token,同时记录他们的行列号,丢掉不必要的信息,这个词法分析器很简单,简单的状态机就能胜任,用正则就没有自己造轮子的快感了,所以要自己手撸状态机拆token出来. 模仿vczh的语言,我的语言包括了以下要素 标识符:大小写字

编译原理:C语言词法分析器

编译原理的实验:完成对C语言的词法分析 先说一下整体框架: 基类:Base  封装了一些基础的字符判断函数,如下: int charkind(char c);//判断字符类型 int spaces(char c); //当前空格是否可以消除 int characters(char c);//是否是字母 int keyword(char str[]);//是否是关键字 int signwords(char str[]);//是否是标识符 int numbers(char c);//是否是数字 in

Java 实现《编译原理》简单词法分析功能

Java 实现<编译原理>简单词法分析功能 简易词法分析功能 要求及功能 (1)读取一个 txt 程序文件(最后的 # 作为结束标志,不可省去) { int a, b; a = 10; if(a>=1){ b = a + 20; } } (2)词法识别分析表 单词类别|单词自身值|内部编码 -|-|- 关键字| int.for.while.do.return.break.continue| 1 标识符| 除关键字外的以字母开头,后跟字母.数字的字符序列| 2 常数| 无符号整型数| 3

编译原理123

1.编译原理就是什么? 个人理解,编译就是像翻译一样,将一种语言翻译成另一种语言,编译就是将高级语言或汇编语言翻译成电脑能识别的二进制机器语言,编译原理就是讲解这 个编译的过程.内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码生成.存储管理.代码优化和目标代码生成. 编译原理是计算机专业设置的一门重要的专业课程.虽然只有少数人从事编译方面的工作,但是这门课在理论.技术.方法上都对学生提供了系统而有效的训练,有 利于提高软件人员的素质和能力. 2.学习编译原理有什么好处? 学习编译原