编译原理
哈工大《编译原理》课程的笔记
摩霄志在潜修羽
骐骥一跃,不能十步。驽马十驾,功在不舍。
展开
-
编译原理——词法分析器的C语言实现
/**author: cuiyanran *date: 2020-4-26 15:08*version: 1.0*IDE: Dev-C++*/ #include <iostream>#include <cstdio>#include <cstring>#include <windows.h>#include <...原创 2020-06-13 14:50:02 · 10601 阅读 · 2 评论 -
编译原理【4】文法转换(消除左递归)
并不是所有文法都适合自顶向下分析,下面列举两个自顶向下分析中遇到的问题:1.同一非终结符的多个候选式前缀相同时,会导致回溯现象从而效率低下。为什么要消除左递归?如果是类似于A→AαA\rightarrow A\alphaA→Aα的左递归文法,由于对当前句型的分析按照最左推导执行,因此将会使得递归下降分析器陷入无限循环。故需要消除。(参考下图,最后会生成以A开头,后面跟着无限个α的句子)...原创 2020-05-08 13:48:06 · 2591 阅读 · 0 评论 -
编译原理【3】语法分析概述
推导需要完成的两个选择:选择替换当前句型的哪个非终结符,以及用哪个候选式去替换。最左推导与最右规约(由于自顶向下的分析器自左向右扫描串,因此采用最左推导方式)最左推导:替换每个句型最左端的非终结符最右推导与最左规约(规范推导与规范规约)正好与上面描述的相反。最左推导与最右推导的唯一性:由于最左推导和最右推导总是选择一端的非终结符进行替换,因此最左推导和最右推导的结果都是唯一...原创 2020-05-08 11:56:03 · 1484 阅读 · 0 评论 -
编译原理【2】词法分析
基本表示其中正闭包就是一个字母表中所有次幂(从1开始)构成的集合,也就是克林闭包少了0次幂(空集ϵ\epsilonϵ)的形式。终结符与非终结符终结符:文法所定义语言的基本符号,也称token,例如VT={apple,boy,eat,little}V_T=\{apple,boy,eat,little\}VT={apple,boy,eat,little}非终结符(语法变量):用来表示...原创 2020-04-24 11:03:27 · 849 阅读 · 0 评论 -
编译原理【1】概述:词法分析、语法分析、语义分析
什么是编译?编译就是将高级语言程序转换成汇编语言程序/及其语言程序的过程。编译,说白了就是翻译,对比精细的人工英译汉的步骤:词法分析:分析词性:每个词属于名词?形容词?动词?介词…语法分析:分析各种介词短语、名词短语、动词短语…语义分析:以上两个步骤的意义就是为语义分析做铺垫,通过将语法展开成下图树的形式,可以最终根据根节点分析出整个句子的意思是什么。编译的步骤也和人工翻译是一样...原创 2020-04-24 10:29:14 · 14259 阅读 · 3 评论