编译原理一:想初步了解编译原理?看这篇文章就够了
为什么要学习编译原理
作为程序员,不管是前端开发工程师还是后端开发工程师,编译技术都与我们的工作息息相关柳州道教灵符网请符。在实际工作中也经常会碰到需要编译技术的场景。比如,前端开发工程师想要了解Type是如何把一门语言翻译成另一门语言的,以及babel是如何编译Java的等等。 学习编译技术有助于提升我们的职场竞争力,更有助于程序员在技术的道路上走的更远。那么学习完本篇文章你会对编译原理有个初步的认识,比如:
知道为什么要学习编译
了解编译原理和柳州道教灵符网请符我们日常开发中使用的开发语言的关系
柳州道教灵符网请符了解编译在语言系统中所处的位置及 编译系统的结构
了解 词法分析、语法分析、语义分析 这些柳州道教灵符网请符我们工作中经常听到的概念等等
什么是编译原理 编译与计算机程序设计语言的关系
注意:每种机器都对应一种汇编语言
程序设计语言的转换方式
翻译:指把某种语言的源程序柳州道教灵符网请符, 在不改变语义的条件下,转换成另一种语言程序即目标语言程序
真正的实现有两种方式柳州道教灵符网请符,编译及解释
编译 :专指由高级语言转换为低级语言, 整个程序翻译 柳州道教灵符网请符。常用的例如:c、c++,delphi,Fortran、Pascal、Ada
解释 :接受某种高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这个句子的执行结果,然后再接受下一个语句柳州道教灵符网请符。类似口译, 一句一句进行解释 。常用的例如:python 解释以源程序作为输入, 不产生目标程序 ,一边解释一边执行。 优点 :直观易懂,结构简单,易于实现人机对话。 缺点 :效率低(不产生目标程序,每次都需要重新执行,速度慢)
编译的转换过程
编译运行
编译汇编运行
编译器在语言处理系统中的位置
了解了编译与程序设计语言的关系柳州道教灵符网请符,那么我们接下来再来看下编译器在语言处理系统中所处位置,如下图
编译系统的结构
那么机器是如何把高级语言翻译为汇编语言程序或机器语言程序的呢柳州道教灵符网请符?
我们先来看下人工进行英文翻译的例子柳州道教灵符网请符,这里引用的哈工大编译原理中的图示
图中的 中间表示很重要主要起到了一个桥梁的作用,比如图中的中间表示可以使用各种语言表示柳州道教灵符网请符。
根据上图可以看出要进行语义分析首先需要划分句子成分柳州道教灵符网请符,那么我们是如何划分句子成分的呢?
首先通过 词法分析分析出句子中各个单词的词性或者词类
然后进行 语义分析根据句子结构分析出句子中各个短语在句子中充当什么成分 柳州道教灵符网请符,从而确定各个名词性成分同各个核心谓语动词间的关系语意关系
最后给出中间表示形式 实际上编译器在工作的时候也是经过了以上几个步骤,我们成为 阶段(计算机的逻辑组织方式,在实现过程中多个阶段可能会被组合在一起实现) ,可以分为两大部分: 分析源语言、生成目标代码 ,在编译器中他们分别对应编译器的前端和后端两个部分柳州道教灵符网请符。编译器的结构如下图 了解了编译器的结构,让我们从编译器的前端开始讲起,看看词法分析、语法分析、语义分析等各个阶段都做了什么。
词法分析(扫描)
t o k e n : 种别码柳州道教灵符网请符,属性值 token:种别码,属性值
名字解释
一词一码 :例如柳州道教灵符网请符,关键字是唯一的且事先可以确定,为每个关键字分配一个种别码
多词一码 :例如柳州道教灵符网请符,所有的标示符统一作为一类单词分配同一个种别码,为了区分不同的标示符,用token的第二个分量“属性值”存放不同标示符具体的字面值
一型一码 :不同类型的常量他们的构成方式是不同的,例如,我们为每种类型的常量分配一个种别码,为了区分同一类型下的不同常量,也用token的第二个分量“属性值”存放每个常量具体的值 下面图中是一个词法分析后得到的token序列的例子 描述词法规则的有效工具是 正规式 和 有限自动机 柳州道教灵符网请符。 正规式 :用来确定单词是否和程序语言规范。 有限自动机 :通过有限自动机进行单词和正规式比较
语法分析(parsing) 语法分析的定义
语法分析的规则
即 语法规则又称 文法,规定了单词如何构成短语、句子、过程和程序柳州道教灵符网请符。
语法规则的标示如下柳州道教灵符网请符,含义是A定义为B或者C
B N F : A : : = B ∣ C BNF: A::= B∣
句子 : : = 主 谓 宾 句子::=主谓宾
主 : : = 定 名 主::=定名
来看下赋值语句的语法规则:
A::=V=E
E::=T|E+T
T::=F|TF
F::=V|(E)|C
V::=标示符
C::=常数 即由标示符或者常数的表达式进行加减乘除运算
语法分析的方法
推导(derive)和归约(reduce)
推导 :最左推导、最右推导
归约 :最右归约、最左归约,推导的逆过程就是归约
最右推导、最左归约: 最左推导、最右归约:
语法树
计算机通过 语法树来进行分析,即语法分析过程也可以用一颗倒着的树来标示,这颗树叫 语法树柳州道教灵符网请符。正确的语法树叶子节点数必须是表达式的符号,例如
赋值语句的分析树:
变量声明语句的分析树:
首先看下变量声明语句的文法( 文法是由一系列规则构成的):
D TIDS;
T int | real | char | bool
IDS id | IDS, id
复制代码
语义分析
语义的任务主要有两个
一. 收集标识符的属性信息
种属(Kind) :简单变量、复合变量(数组、记录、...)、过程、...
类型 (Type) :整型、实型、字符型、布尔型、指针型、...
存储位置、长度
值
作用域
参数和返回值信息 柳州道教灵符网请符,参数个数、参数类型、参数传递方式、返回值类型、... 语义分析阶段收集的标识符的信息都会存储在一个 符号表 里,每个标识符都对应符号表中的 一条记录 ,记录的每个字段记录标识符的每个属性,符号表通常带有一个 字符串表 用来存放程序中用到的标识符和字符常数, Name 就会被分为两个部分,一部分存放标识符在字符串表中的起始位置,另一部分用来存储标识符的长度 ,符号表如下图: 除了符号表还有 常量表 (登记各类常量表); 标号表 (登记标号的定义和应用,不常用目标); 入口名表 (登记过程的层号、程序符号表入口等),各种表的生成大部分在词法分析阶段但是在后面各个阶段都有维护; 中间代码表
二. 语义检查
变量或过程 未经声明就使用
变量或过程名 重复声明
运算分量 类型不匹配
操作符与操作数之间的类型不匹配
数组下标 不是整数
对 非数组变量 使用数组访问操作符
对 非过程名 使用过程调用操作符
过程调用的参数类型或数目不匹配
函数 返回类型 有误
中间代码生成
常用的中间代码表示形式
三地址码 (Threeaddress Code):三地址码由类似于汇编语言的指令序列组成柳州道教灵符网请符,每个指令最多有三个操作数(operand)
语法结构树/语法树 (Syntax Trees)
逆波兰式
三地址指令的表示:
四元式 (Quadruples)柳州道教灵符网请符,(op, y, z, x)
三元式 (Triples)
间接三元式 (Indirect triples)
下面图中展示柳州道教灵符网请符了一个中间代码生成的例子
代码优化
对前面生成的中间代码进行加工变换,以便在最后极端产生更为高效的目标代码 , 需要遵循等价变换的原则,优化的方面包括:公共子表达式的提取、合并已知量、删除无用语句、循环优化柳州道教灵符网请符。
目标代码生成
把经过优化的中间代码转化成特定机器上的低级语言
目标代码的形式:
绝对指令代码:可立即执行的目标代码
汇编指令代码:汇编语言程序柳州道教灵符网请符,需要经过汇编陈旭汇编后才能运行
可重定位指令代码:先将各目标模块连接起来柳州道教灵符网请符,确定变量、常数在主存中的位置,装入主存后才能成为可以运行的绝对指令代码
其柳州道教灵符网请符他
出错处理
如果源程序有错误,编译程序应设法发现错误并报告给用户柳州道教灵符网请符。由专门的出错处理程序来完成。错误类型:
语法错误:在词法分析和语法分析阶段检测出来
语义错误:一般在语义分析阶段检测
逻辑错误:不可检测柳州道教灵符网请符,比如死循环,一般不处理因为没办法在编译阶段检测出来
遍
指对源程序或源程序的中间结果从头到尾扫描一次,并做有关的加工处理,生成新的中间结果或目标代码柳州道教灵符网请符。 遍与阶段的含义毫无关系
多遍扫描: 优点:节省内存空间,提高目标代码的质量,使编译的逻辑结构清晰柳州道教灵符网请符。 缺点:编译时间长。在内存许可的情况下还是遍数尽可能少较好
编译程序生成
直接用机器语言编写编译程序
用汇编语言编写编译程序 柳州道教灵符网请符,编译程序核心部分常用汇编语言编写
用高级语言编写编译程序 柳州道教灵符网请符,这也是普遍采用的方法
自编译
编译工具 LEX(语法分析)与YACC(用于自动生成LALR分析表)
移植 (同种语言的编译程序在不同类型的机器之 间移植) 在某机器上为某种语言构造编译程序要掌握以下三方面:
源语言
目标语言
编译方法 编译的基础知识就是这些啦柳州道教灵符网请符,后续会继续深入的学习并记录,喜欢麻烦点赞哈
—版权声明—
来源:前端小小min柳州道教灵符网请符,编辑:nhyilin
仅用于学术分享,版权属于原作者柳州道教灵符网请符。
若有侵权柳州道教灵符网请符,请联系微信号:Eternalhui或nhyilin删除或修改!
—THE END—
☞ 热议!原北大博导被吊销教资许可证柳州道教灵符网请符,曾被与多人发生关系......
☞ 同济一博士生3年发表14篇一作论文引热议柳州道教灵符网请符,本人亲自下场回应!
☞ 2022 年谷歌博士生奖学金名单公布柳州道教灵符网请符,17 位华人博士生入选
☞ Nature两连发:揭秘美国博导学术霸凌亚洲博士后黑幕
☞ 「金氏黑手党」师从这位芯片教父柳州道教灵符网请符,让韩国半导体在世界崛起
☞ 国家杰青!苏州大学柳州道教灵符网请符,迎来新校长!
免费测八字 今年运势 请加师父微信
免费看八字运势 请加师父微信: sanqingge8
寻找符咒,灵符,符咒网,道教符咒网,灵符网站,灵符网官网,购买符咒请灵符,这里有各种手绘开光符咒:财运符,财运符咒,财运亨通符咒,五路财神符咒,太岁符咒,化太岁符咒,回心转意符咒,护身符咒,文昌符咒,学业灵符符,开运符咒,转运灵符,桃花符,月老姻缘符咒,偏财符,五鬼运财符咒,化小人符咒,事业符咒,升官符咒,去病符咒,去疾符咒,健康符咒,平安符咒,夫妻和合符,情感和合符咒。
咨询道教符咒 咨询师父微信: sanqingge8
符咒类型如下:
01.财运符-增财运补财库开运 02.太岁符-化解不利顺利度过 03. 回心符-挽回感情增缘复合 04. 护身符-辟邪镇宅转运护身 05. 学业符 -魁星点斗文昌帝君 06. 开运符-开运转运驱除霉运 07. 桃花符-桃花早到月老姻缘 08. 偏财符-五鬼运财偏财运势 09 .小人符-化解小人是非口舌 10 .事业符-事业有成无往不利 11. 去疾符-药王化疾祛病消愈 12. 健康符-身心健康得偿所愿 13. 平安符-诸事顺利健康平安 14 .和合符-夫妻情感姻缘和合 15.定制符-心有所想 专属定制
咨询道教法事 咨询师父微信:sanqingge8
01.化解太岁法事——解太岁、谢太岁 02.升官晋职法事 ——官运亨通提升政绩 03.文昌考试法事—— 开窍聪慧考试顺利 04.偿还阴债法事—— 生债阴宅逢凶化吉 05.开财门补财库—— 增加财运助旺事业 06.助种生基法事—— 病魔缠身增寿增运 07.催子受孕法事—— 生子布阵子女满堂 08.开运转运法事—— 改运天命一帆风顺 09.催财发财法事—— 偏财运势正财持久 10.化解童子法事—— 姻缘顺利仙灵护佑 11.化解小人法事—— 化解小人防人陷害 12.小儿平安法事—— 驱邪回魂活泼健康 13.超度亡灵法事—— 祭奠亲人早登极乐 14.超度宠物法事—— 人类朋友转生脱苦 15.超度婴灵法事—— 打胎坠胎消灾除难 16.祈福许愿法事—— 许愿还愿祈求祈福
本文链接:https://fuzhouwang.org/index.php/post/11202.html
转载声明:本站文章中有转载或采集其他网站内容, 如有转载的文章涉及到您的权益及版权,还麻烦及时联系我们,我们将及时删除,谢谢配合。