必要的软件架构师——编译原理·语法

时间:2022-02-07 01:45:54

最近软测试。我观看进程的视频!

发现里面有很多内容已经在自我不错的接触过程。而占80%比例!

但其中的一部分。我很奇怪的一部分。研究,在这里,将我研究的内容整理分享给大家!

编译原理:

首先,我第一眼看到他的时候。认为这是个特神奇的科学知识!

里面应该有非常多难点。可是。我的愿望达到了,前两次看书都有点云里雾里的感觉。可是随着接触的深入,视频,书籍,网络三方面的共同攻击下,这个神奇的东西,变得不神奇了。

编程语言的发展。我们只是多介绍。想了解的,能够去看这个站点“编程语言发展历史”。我们都明确到今天我们使用java这个第三代编程语言,能够使用人类熟悉的思维方式编程,中间我们走过了非常多,而编译原理。我们能够这么简单理解:

最早的没有如今意义上的编译器,曾经人们直接面对计算机编码,是靠打孔器打纸带编程。大型机靠读纸带运行程序。

因为机器语言由0、1组成,难以阅读。所以在机器语言的基础上开发了汇编语言。因为汇编语言还是非常难使用,所以开发出高级语言。

也能够预见,第一个高级语言编译器是由汇编语言编写的。

而编译恰恰是这个过程的逆过程,我们看一张表:

必要的软件架构师——编译原理·语法

这就是编译原理的基本过程,中间码就是近似的汇编语言。而目标程序就是机器可识别的0和1

文法:

就像我们写博客一样,我们写出来的东西要想共同交流,必须依照一定的格式去写,我用英语的格式写没有学过英语的人,就像看天书一样,汇编中的文法,和此类似,我们要依照一定的规则进行词法分析和语法分析,而当中的根据之中的一个就是今天的主角文法!

我们知道。代码到0和1之前,基本上都是一些字符组成的有意义的语句。而编译就是将他们一步步拆解成计算机能理解的语句的过程,这里就衍生出一个概念,就是终结符合非终结符!

终结符:在程序中已经不可拆解,语句的含义到此为止。表现形式:字母小写

        非终结符:在程序中还能够可拆解,语句包括多重意思,表现形式:字母大写

而我们将文法分级,就是为了让计算机推断,我们的语句分解到什么程度了。或者他是个什么结构的语句

0型文法

设G={VT,VN,S,P},假设它的每一个产生式α→β是这样一种结构:α∈(VT∪VN)* 且至少含有一个非终结符,而β∈(VT∪VN)*。则G是一个0型文法。

0型文法也称短语文法。一个很重要的理论结果是:0型文法的能力相当于图灵机(Turing)。或者说,不论什么0型文语言都是递归可枚举的,反之,递归可枚举集必然是一个0型语言。0型文法是这几类文法中限制最少的一个。所以一般见到的至少是0型文法。

1型文法

1型文法也叫上下文有关文法,此文法相应于线性有界自己主动机。

它是在0型文法的基础上每个α→β,都有|β|>=|α|。这里的|β|表示的是β的长度。

注意:尽管要求|β|>=|α|。但有一特例:α→ε也满足1型文法。

        如有A->Ba则|β|=2,|α|=1符合1型文法要求。反之,如aA->a,则不符合1型文法。

2型文法

2型文法也叫上下文无关文法,它相应于下推自己主动机。2型文法是在1型文法的基础上。再满足:每个α→β都有α是非终结符。

如A->Ba,符合2型文法要求。

        如Ab->Bab尽管符合1型文法要求,但不符合2型文法要求,由于其α=Ab。而Ab不是一个非终结符。

3型文法

3型文法也叫正规文法,它相应于有限状态自己主动机。它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。

如有:A->a,A->aB,B->a,B->cB。则符合3型文法的要求。但假设推导为:A->ab,A->aB,B->a,B->cB或推导为:A->a,A->Ba,B->a,B->cB则不符合3型方法的要求了。详细的       说,样例A->ab,A->aB,B->a,B->cB中的A->ab不符合3型文法的定义,假设把后面的ab,改成“一个非终结符+一个终结符”的形式(即为aB)就对了。

样例A->a,A->Ba,B->a,B->cB中假设把B->cB改为B->Bc的形式就对了。由于A→α|αB(右线性)和A→α|Bα(左线性)两套规则不能同一时候出如今一个语法中,仅仅能全然满足当中的一个,才干算3型文法。

补充:0型文法包括1,型文法,1型文法包括2,型文法,2型文法包括3型文法

总结

文法和我们已经解除的知识,事实上还是有非常多联系的,比方我们没学一门语言。我们发现。基础的内容都大同小异,只要写不同的代码格风格各异,我们称之为语法,我们推断,这是java编写代码或c#编写代码。有时一些困难,语法是一系列规定格式,如果只有这格型组成,那是,java编写代码。所以。编译语法,是一个标准。按照标准,我们问什么是。所以,这不是它的一个很好的理解?

必要的软件架构师——编译原理·语法的更多相关文章

  1. 编译原理简单语法分析器(first,follow,分析表)源码下载

    编译原理(简单语法分析器下载) http://files.cnblogs.com/files/hujunzheng/%E5%8A%A0%E5%85%A5%E5%90%8C%E6%AD%A5%E7%AC ...

  2. Compiler Theory(编译原理)、词法/语法/AST/中间代码优化在Webshell检测上的应用

    catalog . 引论 . 构建一个编译器的相关科学 . 程序设计语言基础 . 一个简单的语法制导翻译器 . 简单表达式的翻译器(源代码示例) . 词法分析 . 生成中间代码 . 词法分析器的实现 ...

  3. python实现算术表达式的词法语法语义分析(编译原理应用)

    本学期编译原理的一个大作业,我的选题是算术表达式的词法语法语义分析,当时由于学得比较渣,只用了递归下降的方法进行了分析. 首先,用户输入算术表达式,其中算术表达式可以包含基本运算符,括号,数字,以及用 ...

  4. 【编译原理】c++实现自下而上语法分析器

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  5. 【编译原理】c++实现自上而下语法分析器

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  6. <编译原理 - 函数绘图语言解释器(2)语法分析器 - python>

    <编译原理 - 函数绘图语言解释器(2)语法分析器 - python> 背景 编译原理上机实现一个对函数绘图语言的解释器 - 用除C外的不同种语言实现 设计思路: 设计函数绘图语言的文法, ...

  7. 【编译原理】LL1文法语法分析器

    上篇文章[编译原理]语法分析--自上向下分析 分析了LL1语法,文章最后说给出栗子,现在补上去. 说明: 这个语法分析器是利用LL1分析方法实现的. 预测分析表和终结符以及非终结符都是针对一个特定文法 ...

  8. 跟vczh看实例学编译原理——三:Tinymoe与无歧义语法分析

    文章中引用的代码均来自https://github.com/vczh/tinymoe.   看了前面的三篇文章,大家应该基本对Tinymoe的代码有一个初步的感觉了.在正确分析"print ...

  9. 跟vczh看实例学编译原理——二:实现Tinymoe的词法分析

    文章中引用的代码均来自https://github.com/vczh/tinymoe.   实现Tinymoe的第一步自然是一个词法分析器.词法分析其所作的事情很简单,就是把一份代码分割成若干个tok ...

随机推荐

  1. 开发错误日记 12&colon; Unsupported major&period;minor version 52&period;0

    开发错误日记 12: Unsupported major.minor version 52.0 在编译时出现如下错误: java.lang.UnsupportedClassVersionError: ...

  2. &lbrack;转&rsqb;Cygwin的包管理器:apt-cyg

    [转]Cygwin的包管理器:apt-cyg http://zengrong.net/post/1792.htm Cygwin的包管理工具setup.exe实在是难用的让人蛋碎.于是就有了这样一个ap ...

  3. javaBean为什么要实现Serializable接口?

    引用:http://jzinfo.javaeye.com/blog/519470 Java的"对象序列化"能让你将一个实现了Serializable接口的对象转换成一组byte,这 ...

  4. android 获取当前版本号&sol;修改自定义的应用程序的版本号

    1.获取当前版本号 PackageManager pm = getPackageManager(); PackageInfo pi = pm.getPackageInfo(getPackageName ...

  5. centos 6&period;4 更新源地址

    执行如下命令: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.old vim /etc/yum.repo ...

  6. 2136 Largest prime factor(打表)

    Problem Description Everybody knows any number can be combined by the prime number.Now, your task is ...

  7. &lbrack;CSS&rsqb; Transitions动画效果&lpar;1&rpar;

    Transitions动画效果(1) 源码 https://github.com/YouXianMing/CSS-Animations/tree/master/Transitions 效果 细节

  8. UI自动化(四)css样式

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. A1060&period; Are They Equal

    If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered ...

  10. PAT甲题题解-1030&period; Travel Plan &lpar;30&rpar;-最短路&plus;输出路径

    模板题最短路+输出路径如果最短路不唯一,输出cost最小的 #include <iostream> #include <cstdio> #include <algorit ...