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

发现里面有很多内容已经在自我不错的接触过程。而占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. Prototype Pattern 原型模式

    7.6 原型模式总结 原型模式作为一种快速创建大量相同或相似对象的方式,在软件开发中应用较为广泛,很多软件提供的复制(Ctrl + C)和粘贴(Ctrl + V)操作就是原型模式的典型应用,下面对该模 ...

  2. C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。

    原文:C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法. 一般我们在撰写Windows Phone ...

  3. jQuery插件使用和写法

    jQuery插件分类3中: 1.封装对象方法的插件. 2.封装全局函数的插件. 3.选择器插件. jQuery插件机制 jQuery提供了两个用于扩展jQuery功能的方法: 1.jQuery.fn. ...

  4. lsb_release: command not found 解决方法(转)

    问题:通过lsb_release -a 是查看linux系统版本时报错,具体的解决办法如下: [root@localhost ~]# lsb_release -a-bash: lsb_release: ...

  5. Android毛玻璃处理代码(Blur)

    以下为将bitmap图像处理为毛玻璃效果的图像的工具类: public class FastBlurUtil { public static Bitmap doBlur(Bitmap sentBitm ...

  6. Codeforces 385B Bear and Strings

    题目链接:Codeforces 385B Bear and Strings 记录下每一个bear的起始位置和终止位置,然后扫一遍记录下来的结构体数组,过程中用一个变量记录上一个扫过的位置,用来去重. ...

  7. 开源Math.NET基础数学类库使用(07)一些常用的数学物理常数

    原文:[原创]开源Math.NET基础数学类库使用(07)一些常用的数学物理常数               本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/ ...

  8. [LeetCode] Search in Rotated Sorted Array II [36]

    称号 Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would t ...

  9. Swing 组件焦点设置

    在Swing中,焦点默认是在第一个组件上,所以在项目中想将焦点设置在其他的组件上,如JTextField!但通过requestFocus()方法不起作用,有人提供以下解决方法: 全部初始化之后,jTe ...

  10. Java多播通讯框架 JGroups(转)

    JGroups是一个可靠的群组通讯Java工具包.它基于IP组播(IP multicast),但在可靠性,组成员管理上对它作了扩展. JGroups的可靠性体现在: 1,对所有接收者的消息的无丢失传输 ...