编译原理
阿伟のBlog
一个爱好分享知识的普通大学生。
展开
-
逆波兰式的产生及计算(C++/Java)---编译原理
编译原理中利用栈这种数据结构将中缀表达式转换成后缀表达式,即逆波兰表达式,并计算其结果.原创 2020-10-20 12:44:22 · 7171 阅读 · 1 评论 -
C语言词法分析器--编译原理
C语言词法分析器(C++语言实现)这是老师布置的编译原理的实验课任务,课余时间花了近一个星期的时间去编写代码(主要是C++太久没有用了,好多函数都不熟悉,查阅了很多资料),这次的词法分析没有语法错误判断功能,如果想要增加功能可以在相关函数代码段增加即可.c语言词法分析流程如图所示:代码如下:这次的代码算是我对代码整洁之道前期知识的一个练习,特别是变量的命名以及函数的编写,如果觉得写的不错可以看看我关于代码整洁之道的相关文章这次的代码基本没有写注释,但是我相信大家结合流程图也能看懂,如果觉得太长原创 2020-09-21 23:24:06 · 7308 阅读 · 1 评论 -
C语言词法分析器(C++语言实现)
C语言词法分析器(C++语言实现)这是老师布置的编译原理的实验课任务,课余时间花了近一个星期的时间去编写代码(主要是C++太久没有用了,好多函数都不熟悉,查阅了很多资料),这次的词法分析也没有语法错误判断功能,如果想要增加功能可以在相关函数代码段增加即可.对于此法单元的种别码也只是简单区分,不过自己加上去就可以了c语言词法分析流程如图所示:代码如下:这次的代码算是我对代码整洁之道前期知识的一个练习,特别是变量的命名以及函数的编写,如果觉得写的不错可以看看我关于代码整洁之道的相关文章这次的代码基原创 2020-09-20 23:29:45 · 6440 阅读 · 0 评论 -
有穷自动机(Finite Automate)及其分类和转化
有穷自动机(Finite Automate)及其分类和转化自我理解有穷自动机在我目前浅薄的知识看来就是在词法分析阶段对程序中所有出现的单词进行逐一判断和分类,如果一个单词能被某个有穷自动机接收的话,那么它就是某一类单词,如果所有有穷自动机都不能接收它的话,它就不符合语法有穷自动机分类虽说有穷自动机有分类,但是他们其实是可以相互转换的.确定的有穷自动机(Deterministic finite automate,DFA)不确定的有穷自动机(Nondeterministic finite au原创 2020-08-24 11:57:14 · 2455 阅读 · 0 评论 -
正则表达式
正则表达式正则表达式是一种用来描述正则语言更紧凑的方法.正则表达式可以由较小的正则表达式按照特定规则递归地构建。每个正则表达式 r定义(表示)一个语言,记为L®。这个语言也是根据r的子表达式所表示的语言递归定义的正则文法和正则表达式等价正则文法和正则表达式等价...原创 2020-08-18 11:01:56 · 1829 阅读 · 0 评论 -
上下文无关文法的分析树(Context-Free Grammar, CFG)的分析树--编译原理
上下文无关文法的分析树(Context-Free Grammar, CFG)的分析树分析树根节点的符号为文法开始符号S每个内部节点都是对某个产生式A→β的应用,该节点的标号就是产生式的左部,子节点从左往右构成了产生式的右部.叶子节点的标号既可以是终结符,也可以是非终结符,把一棵树的叶子节点从左往右的排列得到的符号称为这棵树的产出或者是边缘.句型的短语短语:给定一个句型,其分析树的每一颗子树的边缘称为该句型的一个短语如果子树的高度为2(只有父子两代节点),那么该子树的边缘就称为该句型的直原创 2020-08-17 10:55:10 · 2954 阅读 · 0 评论 -
文法的分类---编译原理
编译原理中文法的分类及它们之间的关系原创 2020-08-17 10:16:10 · 1931 阅读 · 0 评论 -
语言的定义——编译原理
什么是编译原理中的推导和规约,句型和句子,语言的形式化定义原创 2020-08-17 09:18:38 · 3659 阅读 · 0 评论 -
什么是字母表和串---编译原理
什么是字母表和串—编译原理字母表字母表是一个有穷符号集合,符号包括:字母,数字,标点…常见的字母表有:ASCIIUnicode字母表的运算1 字母表的乘积2.字母表的n次幂长度为0的串用 ε 表示3.字母表的正闭包4.字母表的克林闭包串串的运算...原创 2020-08-15 11:10:18 · 3387 阅读 · 0 评论 -
中间代码生成及编译器后端概述
中间代码生成及编译器后端概述中间代码的生成经过了词法分析,语法分析,语义分析之后就到了中间代码生成阶段中间代码有两种形式:三地址码语法结构树(简称语法树),这和之前的语法分析树不同三地址码三地址码由类似汇编语言的指令序列组成,每个指令最多有三个操作数,所以称为三地址码地址可以有三种形式源程序中的名字(变量名)常量编译器产生的临时变量常见的三地址指令三地址指令的表示四元式三元式间接三元式目标代码的生成中间代码生成之后会对其代码进行一定程度的优化,然后就进入原创 2020-08-15 10:13:05 · 2167 阅读 · 0 评论 -
语义分析(semantic analysis)概述
语义分析(semantic analysis)概述原码中通常有两类语句:声明语句和可执行语句.对这两种语句,语义分析所做的事情是不同的.声明语句:收集标识符的属性信息可执行语句:语义检查声明语句中的语义分析收集标识符的属性信息:种属类型地址和长度值作用域参数和返回类型语义分析器中有专门的**符号表(Symbol Table)**来存放收集到的属性信息为什么要有一个字符串表来表示名字,而不是直接使用字符串?可执行语句的语义分析可执行语句的语义分析其实大体可以理解为对可执原创 2020-08-14 12:49:28 · 5347 阅读 · 0 评论 -
语法分析(syntax analysis)概述
语法分析(syntax analysis)概述语法分析就是语法分析器(phraser)从词法分析器输出的token序列中识别出各类短语,并构造语法分析树赋值语句的语法分析树变量声明的语法分析树D=Declaration(声明语句) T=Type(类型) IDS=Identifier Sequence(标识符序列)...原创 2020-08-14 12:03:55 · 2485 阅读 · 0 评论 -
词法分析概述
什么词法分析,什么是token?原创 2020-08-14 10:29:36 · 2652 阅读 · 0 评论 -
编译系统的结构
编译系统的结构编译一定程度上我们可以理解为翻译,所以我用一个英语翻译成中文的例子的解释一下编译系统的结构eg :I went to school by bus.如果让大家翻译的话,相信大家很快就能翻译出来,但是翻译的过程是什么样的呢?首先我们分析出 I 是人称代词,went是动词,to是介词,school是名词,by是介词,bus是名词(这一步我们称为词法分析(semantic lexical analysis))然后我们分析,动词+介词(went to)可以构成动词短语,介词+名词可以构成原创 2020-08-14 09:30:58 · 2053 阅读 · 0 评论 -
什么是编译
什么是编译编译就是将高级语言翻译成汇编语言或者机器语言的过程为什么要编译高级语言不能直接在机器上执行,因为机器只能理解0和1,但是我们又不太可能直接去编写汇编语言和机器语言,所以搭建一个桥梁来连接起高级语言程序员和机器.编译过程...原创 2020-08-13 22:32:38 · 11838 阅读 · 0 评论