complier principle learn note 0
03 December 2013
词法分析: 断词 词义,词性 语法分析 分析 短语 句 段 篇的 合法性 语义分析 理解含义 中间代码生成 翻译成英文 优化 修饰文章 生成目标代码 定稿 编译是翻译的一个特例 理解成翻译文章的一个过程
词法分析
- 任务:输入源程序;扫描,分解字符串,识别出一个个单词(定义符(关键字),标示符,运算符,分界符(赋值符?),常数),将源程序字符串转换成单词符号,获得其词性等.
- 依据:构词规则(字母数字串即为标示符,查表获得关键字列表,)和自动机理论
- 一个一个字符扫描
语法分析
- 任务:在词法分析基础上,将单词符号串转化为语法单位(语法范畴)(短语,子句,句子,程序段,程序),并确定整个输入串是否构成语法上正确的程序.
- 主要依据:语法规则和上下文无关文法
- 变量,常数及其运算结果,赋值语句都是表达式
语法单位比如说,句子是由单词组成的。你觉得很模糊,但是如果你说,句子是由子句组成,子句是由短语组成的等等,这样比较好理解.一种层次关系
中间代码生成
- 任务:对语法分析并识别出的各类语法单位,分析其含义,并进行初步翻译(产生中间代码)
- 主要依据:语义规则和属性文法
- 四元式:操作符 对象A 对象B 结果 ,有时候可以缺省
中间代码优化
- 任务:对于代码(主要是中间代码)进行加工变换,以便能够产生更加高效(省空间和时间)的目标代码。
- 依据:程序等价变换规则,数据流方程
生成目标代码
- 任务:将中间代码变换成特定机器上的低级语言代码(绝对指令,可重定位指令,汇编代码)
- 主要依据:硬件体系结构,指令系统( 指令集合 寄存器分配 内存分配)
超前搜索,if必须看到(才能停止搜索,才能确定if是个关键字 状态图(状态机),状态转换,状态A--》条件--》状态B 初始状态 读一个字符,判断条件,更新状态 某个状态 读一个字符,判断条件,更新状态(当前是什么状态,是否满足弧线上的条件,若满足,则更新状态) retract 需要多读一个单词,以判断是否是一个可以识别的toekn。判断后,然后再回退。
正则式(正则表达式):用来表示正则集(合)包含的若干个元素。 DFA:有限状态机,是把状态图的表达数学化,公式化,形式化。 闭包 编译原理 07 08 讲了dfa,正则式,09 进行了总结。 NFA:真的好枯燥。。。
公理 定理 推论 公式
老师讲的很好,有思路,有比方(将未知映射成已知),有激情。只是那个投影仪照的老师不舒服,辛苦了。
综上,其实回头来看看《自制编程语言》,里面讲得很笼统,很多需要从龙书里面再去复习。 龙书的优点和缺点都是一样,优点是详细且系统,缺点是冗长,没有耐心的孩子很容易就放弃了。 先看完前几个章节,然后看视频,到第9集(NFA不要太注意)。然后系统的看书,有些算法,如KMP,TRIE后面再细看。形成整体理解再说。
看开源代码也是一样,要形成整体脉络,然后根据需要再去看细节。
blog comments powered by Disqus