编译原理

非计算机专业人员如何成为专业人员的学习之路

随声附和 提交于 2020-03-21 16:42:33
非计算机专业人员如何成为专业人员的学习之路 作者: 阿正-WEB 来源: 博客园 发布时间: 2013-01-14 11:39 阅读: 5243 次 推荐: 36 原文链接 [收藏]   前两天一兄弟给我打电话,他的问题是自己想好好学习计算机编程技术,但是自己想学的东西太多,不知道从何学起,而且学到的东西也在工作中无法用到。这也是我曾经遇到过的问题,因为我也不是计算机专业出身,所以今天我就说一些我对这个问题的看法。   我认为认识一个事物,首先要去了解这个事物的整体,然后再去研究它的内理。就像我们认识一座大楼,我们第一步要先从大楼的四周去看这个大楼的结构,第二步去看这个大楼内部的整体的支撑骨架,第三步才是去研究每一层的结构和房间部署。假如我们首先就从其内部细节开始研究,由于我们对这个事物的整个结构没有了解,就很有可能在一个地方徘徊,可能就在大楼的一层中徘徊,根本就不知道楼上还有几层,也不知道这个大楼的整体骨架,犹如盲人摸象,只能知道其中一部分。纵然最后认识清楚了,也需要耗费很多的时间,走很多弯路。   计算机专业的人从大学开始学习计算机相关知识,他们从《计算机原理》等这方面的书籍了解到最基础的计算机硬件知识,然后再从《计算机操作系统》等书籍了解到整个操作系统的实现和编程环境,再进而通过《编译原理》《计算机网络》等书籍了解到计算机编程语言的原理和网络原理

非计算机专业人员如何成为专业人员的学习之路

女生的网名这么多〃 提交于 2020-03-18 21:51:31
前两天一兄弟给我打电话,他的问题是自己想好好学习计算机编程技术,但是自己想学的东西太多,不知道从何学起,而且学到的东西也在工作中无法用到。这也是我曾经遇到过的问题,因为我也不是计算机专业出身,所以今天我就说一些我对这个问题的看法。   我认为认识一个事物,首先要去了解这个事物的整体,然后再去研究它的内理。就像我们认识一座大楼,我们第一步要先从大楼的四周去看这个大楼的结构,第二步去看这个大楼内部的整体的支撑骨架,第三步才是去研究每一层的结构和房间部署。假如我们首先就从其内部细节开始研究,由于我们对这个事物的整个结构没有了解,就很有可能在一个地方徘徊,可能就在大楼的一层中徘徊,根本就不知道楼上还有几层,也不知道这个大楼的整体骨架,犹如盲人摸象,只能知道其中一部分。纵然最后认识清楚了,也需要耗费很多的时间,走很多弯路。   计算机专业的人从大学开始学习计算机相关知识,他们从《计算机原理》等这方面的书籍了解到最基础的计算机硬件知识,然后再从《计算机操作系统》等书籍了解到整个操作系统的实现和编程环境,再进而通过《编译原理》《计算机网络》等书籍了解到计算机编程语言的原理和网络原理,再进而学习各种我们平时用到的C, C++, Java等编程语言进行应用开发。他们将计算机基础、网络原理到计算机编程应用之间的整个知识体系都学习了一遍,所以他们在工作中遇到一些问题,就很容易解决,从而进步很快

编译原理DFA(有限确定自动机)的构造

ε祈祈猫儿з 提交于 2020-03-18 06:49:57
CODE: https://github.com/pxjw/Principles-of-Compiler/tree/master/consDFA 原题: 1、自己定义一个简单语言或者一个右线性正规文法 示例如( 仅供参考 ) G[S]:S→aU|bV U→bV|aQ V→aU|bQ Q→aQ|bQ|e 2、构造其有穷确定自动机,如 3、利用有穷确定自动机M=(K,Σ,f, S,Z)行为模拟程序算法,来对于任意给定的串,若属于该语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是” K:=S; c:=getchar; while c<>eof do {K:=f(K,c); c:=getchar; }; if K is in Z then return (‘yes’) else return (‘no’) 开始编程! 1.状态转换式构造类: current——当前状态 next——下一状态 class TransTile { public: char current; char next; char input; TransTile(char C,char I,char Ne){ current = C; next = Ne; input = I; } }; 2.DFA的构造类 此处包括DFA的数据集,字母表,以及过程P的定义。 包括了初始化,遍历转换

编译原理学习笔记(一)

若如初见. 提交于 2020-03-17 08:01:44
1.L: { A, B, …, Z, a, b, …, z }, D: { 0, 1, …, 9 }自然语言描述下列运算所描述的语言特征,为每一个语言举两个符合该语言特征的例子: LDD LD* (L和D)D L+D (+代表正闭包) 1.LDD表示串长度为三,大写字母或小写字母开头,第二个和第三个元素为数字的串连接而成的语言 例如A00 C99 z53 2.LD*表示大写字母或小写字母开头,后面的元素为D的闭包的语言 例如A c88 G90525 3.(L和D)D表示串长为2,第一个元素为字母或数字,第二个元素为数字的串构成的语言 例如A0 z9 00 4.L+D表示串长不固定,但最后一个元素为数字,前面为L的正闭包构成的语言 例如A0 cA5 bbb8 2.串和语言的概念区别 词法分析器的作用串是字母表的有穷序列,它不是一个集合,语言是串构成的集合,他是由很多个串构成的 3. 词法分析器的作用 词法分析器的作用是扫描过程源程序的字符流,按照词法的规则把它们组成记号流,然后传递给语法分析器,它可以滤掉原程序功能没有用的部分,比如说注释空格,还有回车,还可以处理与平台有关的输入,还能识别记号,就是把识别出来记号传这个语法分析器,把那个记号放到符号的管理表里面,或者说或者如果符号出错或没有那个符号的话,它会调用那个出错处理器来进行处理,给用户提示这里有错。 4

Cosmos的基石:IL2CPU编译器--C#开源操作系统学习系列三

蹲街弑〆低调 提交于 2020-03-16 19:15:53
某厂面试归来,发现自己落伍了!>>> 本文的代码包以 cosmos-12304.zip 为例(从这个包开始, COSMOS 的内核算是有了个基本的雏形,就像是一颗大树在出芽前会先长出庞大的根系,现在就要破土长出第一颗芽了) IL2CPU 之于 COSMOS 就相当与 GCC 之于 LINUX ,查看 COSMOS 的源代码,可以发现没有一行汇编代码,就连 BOOTLOADER 也是使用 C# 语言来完成的,在 COSMOS 中很对与硬件相对应的类,如屏幕、键盘等,然后在编译的时候再由 IL2CPU 识别出这些特定的类并转换成机器指令代码代码。 由于是纯 C# 的开发环境,因此 IL2CPU 责任重大,需要实现 C# 语言的各种特性,包括对象的初始化、多态、事件、委托等等,当然到 cosmos-12304 为止,这些特性还没有全部实现(后面的应该会一步一步的都实现,不过还没有看过后面的源代码,只是猜测而已)。除此之外, IL2CPU 还负责处理对 .net 的运行库(这个运行库并不是 .net framework ,这个库是 COSMOS 自己实现的与 .net framework 类似但要小很多很多的一个库,以后再讲这一部分) cosmos-12304 这个版本的代码和现在最新的代码在文件结构上有很大的差别,之所以文章从这个代码包开始,是因为小弟从第一个源代码包开始

编译原理-DFA与NFA的等价性

拟墨画扇 提交于 2020-03-15 21:00:35
DFA与NFA的等价性 DFA与NFA的等价性,使得L(M)=L(M’) NFA 和DFA的差别 状态 NFA DFA 初始状态 不唯一 唯一 弧上的标记 字(单字符字、ε) 字符 转换关系 非确定 确定 DFA与NFA的等价性证明 假定NFA M=<S, Σ, δ, S 0 , F>,我们对M的状态转换图进行以下改造: 引进新的初态结点X和终态结点Y,X,Y∉S,从X到S 0中任意状态结点连一条ε箭弧, 从F中任意状态结点连一条ε箭弧到Y。(解决初始状态唯一性) 对M的状态转换图进一步施行替换,其中k是新引入的状态。(简化弧上的标记) 然后下面是NFA转换前后的状态 总来时就是两步走,第一步加入唯一的初态,第二步就是引入中间节点,将弧上的标记拆分成单字符 DFA与NFA的等价性证明 NFA确定化--子集法(解决ε弧和转换关系) 设I是的状态集的一个子集,定义I的ε-闭包ε-closure(I)为: 若s∈I,则s∈ε-closure(I); 若s∈I,则从s出发经过任意条ε弧而能到达的任何状态s’都属于ε-closure(I) 即,ε-closure(I)=I∪{s’|从某个s∈I出发经过任意条ε弧能到达s’} 设a是Σ中的一个字符,定义 I a = ε-closure(J) 其中,J为I中的某个状态出发经过一条a弧而到达的状态集合。 转换过程 确定化:不失一般性

0909编译

给你一囗甜甜゛ 提交于 2020-03-14 03:46:54
1.编译原理学什么? 编译原理主要学习的是编译器的产生过程和对编译器运行的过程方式进行了解,主要有语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 2.为什么学编译原理? 为了更深入的了解程序的编译,了解高级语言。 3.怎么学编译原理? 多看看书,多做课外的上机实验。 4.思考:在没有学习本书理论之前,如果让你写一个编译器,你是什么思路? 首先了解语法,单词,句子。 然后多看程序的结构。 来源: https://www.cnblogs.com/zlcan/p/4795249.html

编译原理第九次作业

别等时光非礼了梦想. 提交于 2020-03-12 11:41:59
1.将DFA最小化:教材P65 第9题 答: I {1,2,3,4,5} {6,7} {1,2}b={1,2,3,4,5} {3,4}b={6,7} {5}b={} {1,2,3,4,5} 可区分 , 划分 II {1,2}{3,4}{5} {6,7} {1,2} 不可区别,等价 {3,4} 不可区别,等价 {6,7} 不可区别,等价 简化后的 DFA: 2.构造以下文法相应的最小的DFA正规文法: S→ 0A|1B A→ 1S|1 B→0S|0 答: 正规文法 -> 正规式 S=0A+1B=0(1S+1)+1(0S+0)=01S+01+10S+10=(01+10)S+01+10 S=(01+10)*01+10 S=(01 | 10)*(01|10) 非确定有穷自动机自动机 NFA : 确定有穷自动机 DFA 0 1 X ∑{A}={ABC} ∑{DF} = {DF} ∑{EH}={EH} Y ∑{DF}={DF} - ∑{BI}={BCI} M ∑{EH}={EH} ∑{BI}={BCI} - N ∑{BCI}={BCI} ∑{DF}={DF} ∑{EH}={EH} 简化 DFA: I {X,Y,M} {N} {X}1={X,Y,M} {Y}1={N} {M}1={} {X} {Y} {M} 可区分 , 划分 II {X} {Y} {M} {N} 简化后的自动机DFA: 3

我的第一篇博客

天大地大妈咪最大 提交于 2020-03-12 01:56:36
今天是我的第一节编译原理的上机课,在这节课中我了解了许多在知乎中许多人关于《编译原理》这门课的看法与理解。 在看了许多前辈们的学习心得之后,我发现《编译原理》这门课就像是所有编程课程的老师。我们正在学习c语言,不能说我们在没有学习《编译原理》之前无法学会c语言,而是说如果我们再《编译原理》这门课的辅助下学习c语言,那么我们学习的会更加深层次,而不是单纯的记住代码,而是可以理解代码的使用原因和性质。就好比开车的例子,如果我们仅仅学会c语言,那我们就只能做个好司机,但是如果我们学习的编译原理,那么我们就可以当一名赛车手,我们了解汽车的性能,我们可以根据自己的需求去改装修理汽车。因此,《编译原理》可以帮助我们成为一名更加强大的程序员。不可否认《编译原理》的学习是一个枯燥的过程,但是枯燥的背后就是成功!对于《编译原理》的学习其实很简单,就是勤快。我们要有耐心的去学习,不仅要上课认真听,课前还需要认真预习,这样子就可以在课堂上更好的吸收知识。《编译原理》这门课程十分复杂,我们不仅仅要学习课堂上的知识,还要在课外找许多关于编译原理的经典著作,花多点时间认真专研。虽然编译原理的理论知识很多,但总所周知,理论最终还是需要用于实践,所以我们要实践与理论相结合,更好的运用知识点!!! 来源: https://www.cnblogs.com/miranda-76/p/5857570.html

编译原理——正规式转DFA算法概述

让人想犯罪 __ 提交于 2020-03-11 19:05:21
一、概念概述 给定一个单词,判断该单词是否满足我们给定的单词描述规则,需要用到编译原理中词法分析的相关知识,其中涉及到的两个很重要的概念就是正规式(Regular Expression)和有穷自动机(Finite Automata)。正规式是描述单词规则的工具,首先要明确的一点是所有单词组成的是一个无穷的集合,而正规式正是描述这种无穷集合的一个工具;有穷自动机则是识别正规式的一个有效的工具,它分为确定的有穷自动机(Deterministic Finite Automata,DFA)和不确定的有穷自动机(Nondeterministic Finite Automata,NFA)。对于任意的一个单词,将其输入正规式的初始状态,自动机每次读入一个字母,根据单词的字母进行自动机中状态的转换,若其能够准确的到达自动机的终止状态,就说明该单词能够被自动机识别,也就满足了正规式所定义的规则。而DFA与NFA之间的差异就是对于某一个状态S,输入一个字符a,DFA能够到达的下一个状态有且仅有一个,即为确定的概念,而NFA所能到达的状态个数大于或等于一个,即不确定的概念。因为NFA为不确定的,我们无法准确的判断下一个状态是哪一个,因此识别一个正规式的最好的方式是DFA。那么,如何为一个正规式构造DFA就成了主要矛盾,解决了这个问题,词法分析器就已经构造完成。从正规式到DFA需要通过两个过程来完成: