添物 不花钱学计算机及编程(预备篇)— 编译原理
编译原理是将一门语言翻译为另一门语言的学科。如果您只是想当个简单的程序员是可以不用学习的,或者有个了解就可以。但是如果您想更好的发展,就要很好的掌握了。
这门课程最大的特色就是,要自己写代码学习,不能光看书。
推荐如下图书:
推荐如下资料(本人的):
编译原理学习基本步骤:
编译原理解析
如果把我上面的内容学好,可以说编译原理掌握的不错了。特别是我的内容是参考上面的清华大学孙悦红老师的课本做的,还得到了其支持。
编译原理基本步骤
将一种语言翻译为另一种语言。
语言:基本字符、词法规则、语法规则、语义。
编译器运行基本步骤:
词法分析
语法分析
语义分析
中间代码生成
优化代码
代码生成
结合符号表处理和错误处理进行处理。
1 词法分析
处理字符。
正则表达式
正则表达式是没有变量的
正规文法
正则表达式和正规文法等价证明
自动机(确定和不确定自动机)
自动机只能描述单词。
开始-》结束状态
图灵机
确定自动机:状态加输入确定下一个状态。
五元表:
不确定自动机:状态加输入出现多个下一个状态选择。
五元表:
初始状态集合
正规式转换为不确定自动机,不确定自动机转换为计算机可处理的确定自动机,然后确定的自动机进行最小化。
这个的讲解感觉廖力讲的不错,讲正则和自动机之间的相互转换讲的比较透彻。足够词法分析使用。康辉的讲解和实践更近一点,但是和实际还是差很远。
程序的实现是DFA的算法实现。自动机是离散数学上的概念,不过学了这个也可以了解离散的自动机应用。
2 语法分析(文法分析)
用来定义程序的格式
BNF范式
最左推导,最右规约
最右推导,最左规约
上下文无关文法
下推自动机
自顶向下:推出为所有终结符
推导
消除左递归
预测分析 first/follow
递归下降分析过程
自底向上:从总结符出发归纳出文法开始
归约
简单优先分析法
算法优先分析法
LR分析法:
3 语义分析
类型识别等
语义子程序
4 中间代码生成
Id1 = id2 + id3
Id4 = 30
语法制导翻译
常用:三元式、四元式、语法树
5 代码优化
提高执行效率:实质是代码等价变换。
比如我们经常使用的Java String 连接 String a = “a ” + “b”;优化为String a = “ab”;
6 目标代码生成
Load reg1, 30
Add reg1,reg2
连接程序
连接程序将几个目标模块和库文件连接在一起成为一个单独的完整程序。目标模块是汇编程序或编译程序的机器码输出,它包括机器码、数据和供连接程序使用的连接信息。比如:一个目标模块可能包括程序的所有数据库功能,而另一个目标模块则包括处理命令行参数的函数。连接程序确定目标模块之间的引用关系,即确定一个模块所引用的例程和数据在另一个模块中的实际位置。Linux核心是由多个目标模块连接而成的独立的大程序。
总结
编译原理是区别专业和非专业程序员的标志之一。
致敬:Richard Stallman (理查德·马修·斯托曼)
理查德·马修·斯托曼(Richard Matthew Stallman, RMS,生于1953年),自由软件运动的精神领袖、GNU(GNU IS NOT UNIX)计划以及自由软件基金会(Free Software Foundation)的创立者、著名黑客。他的主要成就包括Emacs及后来的GNU Emacs,GNU C 编译器及GNU 调试器。 他所写作的GNU通用公共许可证(GNU GPL)是世上最广为采用的自由软件许可证,为copyleft观念开拓出一条崭新的道路。
欢迎加入程序员的世界,添物科技为您服务。
免费加入QQ群:557373922(内有干货)
转载于:https://www.cnblogs.com/hehehaha/p/6332410.html
添物 不花钱学计算机及编程(预备篇)— 编译原理相关推荐
- 添物零基础到大型全栈架构师 不花钱学计算机及编程(预备篇)- 概述
不花钱学计算机及编程 (预备篇) --概述:如何学习计算机及编程 class="video_iframe" height="375" width="5 ...
- 对计算机课程设计的认识,编译原理课程设计心得体会范文
经过一个星期的编译原理课程设计,本人在刘贞老师的指导下,顺利完成该课程设计.通过该课程设计,收获颇多. 一.对实验原理有更深的理解 通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶 ...
- 可编程控制器是计算机,可编程控制器的工作原理!与我们PC有什么区别呢?
PLC采用循环扫描工作方式,这个工作过程一般包括五个阶段:内部处理.与编程器等的通信处理.输入扫描.用户程序执行.输出处理.如下图是: 图1.1.6PLC工作过程 当PLC方式开关置于RUN(运行)时 ...
- 计算机编译原理有必要学吗,计算机程序编译原理学习心得
计算机程序编译原理学习心得 <编译原理>是计算机专业的一门重要课程,正如教材:第一章的引论所述,"编译程序是现代计算机系统的基本组成部分之一"."一个编译程序 ...
- python使用需要钱吗-为什么要花钱学 Python,自学不好吗?
原标题:为什么要花钱学 Python,自学不好吗? 买了这么多课程,有哪一门是你从头到尾听完,并且能将知识点学以致用的?如果你想成为一名相对优秀的程序员,建议你读完这篇文章,如果愿意可以分享给你的朋友 ...
- 科学计算机简单编程_是“计算机科学”还是“编程”?
科学计算机简单编程 by Sam Corcos 由Sam Corcos 是"计算机科学"还是"编程"? (Is It "Computer Scienc ...
- 计算机英语(编程词汇大全)
计算机英语(编程词汇大全) 来源地址:https://blog.csdn.net/D_hj05/article/details/80274471 application [ˌæplɪ'keɪʃ(ə)n ...
- 她让我把电脑带回家。 -您是如何开始计算机和编程的?
I like hearing stories about how people got into computers and programming. Perhaps if I blog my sto ...
- 计算机课 趣味导入,计算机趣味编程教案
<计算机趣味编程教案>由会员分享,可在线阅读,更多相关<计算机趣味编程教案(25页珍藏版)>请在人人文库网上搜索. 1.1-1节 计算机解决问题的过程一. 教学目标1. 知识与 ...
最新文章
- HttpURLConnection 请求
- 你负责人工智能哪部分?人工那部分:知识图谱的构建主要靠人工还是机器?...
- Ubuntu18.04安装Dlib-19.19.0成功
- 8080端口被其他程序占用,Failed to start connector [Connector[HTTP/1.1-8080]],查看占用程序并关闭
- cntk-notes
- java给你的初步印象_Java之初印象
- java 在某个范围内随机_java生成某个范围内的随机时间
- 15个最佳的 JavaScript 表单验证库
- C++ deque
- 严重的 BootHole 漏洞影响所有 Linux 发行版和 Windows 系统(详细分析)
- HttpClient之Java爬虫工具
- 详谈双亲委派机制(面试常问)
- 【EasyExcel导入、导出(百万数据量测试)粘贴即用】
- 如何用课件制作工具验证三角形内角和
- fastposter v2.7.0 发布 电商海报编辑器
- 【论文翻译】基于图关注网络的异构网络类型感知锚链路预测
- maple 解代数方程组得多项式_Maple与数学实验
- CAD中如何查看要素高程
- 2d游戏和 3d游戏的区别
- 360P2建html网站,360P2刷机
热门文章
- MariaDB/MySQL 报错解决:ERROR 1698 (28000): Access denied for user 'root'@'localhost'
- ASP .NET Core Web Razor Pages系列教程四:使用数据库进行交互 entity-framework(MySQL/MariaDB 版)
- LeetCode 206 Reverse Linked List--反转链表--迭代与递归解法--递归使用一个临时变量,迭代使用3个
- 对服务器文件夹写,服务器文件夹写入权限设置
- 退出命令_退出不褪色 离别不离志----石嘴山支队举行2019年度冬季消防员退出命令宣布大会...
- java和php哪个运行更快,java和php哪个入门快?-php教程
- expert one on one oracle,数据库表——EXPERT ONE-ON-ONE ORACLE
- 大白话讲解 零拷贝技术
- python中的turtle函数_1.常用turtle功能函数
- python selenium 处理弹窗_python selenium 弹出框处理的实现