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

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

发现里面有很多内容已经在自我不错的接触过程。而占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编写代码。所以。编译语法,是一个标准。按照标准,我们问什么是。所以,这不是它的一个很好的理解?

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

时间: 2024-10-17 14:27:23

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

编译原理实验 —— 语法分析器

/* 待分析的简单语言的语法 用扩充的BNF表示如下: ⑴<程序>::=begin<语句串>end ⑵<语句串>::=<语句>{:<语句>} ⑶<语句>::=<赋值语句> ⑷<赋值语句>::=ID:=<表达式> ⑸<表达式>::=<项>{+<项> | -<项>} ⑹<项>::=<因子>{*<因子> | /<因子

MYSQL 源代码 编译原理 AST和解析树 代码语法解析

MYSQL 源代码 编译原理 AST和解析树 代码语法解析 http://blog.csdn.net/wfp458113181wfp/article/details/17082355 使用AST树 分类:             antlr              2013-12-02 22:39     255人阅读     评论(0)     收藏     举报 目录(?)[+] 第五章使用AST树中间结果来计算表达式值 创建ASTS 第五章.使用AST树中间结果来计算表达式值 现在我们已

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

本学期编译原理的一个大作业,我的选题是算术表达式的词法语法语义分析,当时由于学得比较渣,只用了递归下降的方法进行了分析. 首先,用户输入算术表达式,其中算术表达式可以包含基本运算符,括号,数字,以及用户自定义变量. 词法分析,检查单词变量是否正确:语法分析,检查算术表达式语法是否正确并输出生成语法树:语义分析,输出四元表达式. 最终效果图: 例如输入: 词法分析结果: 语法分析结果: 语义分析结果: 算术表达式的组成语法如下: 无符号整数 = 〈数字〉{〈数字〉} 〈标识符〉= 〈字母〉{〈字母

编译原理课程设计——语法分析器

实验目的 了解掌握算符优先分析的基本方法.内容:学会科学思考并解决问题,提高程序设计能力. 实验内容与要求 用算符优先分析方法设计一个分析解释程序,对输入的赋值语句.输出语句.清除语句进行词法分析.语法分析.表达式求值并存储于指定变量中:若存在错误,提示错误相关信息. 文法表示 S -> v=E | E? | clear E -> E+T | E–T | T T -> T*F | T/F | F F -> (E) | v | c 问题分析 由于要求用算符优先分析方法来进行程序的语法

编译原理-第二章 一个简单的语法指导编译器-2.4 语法制导翻译

语法制导翻译: 定义:语法制导翻译是通过向一个文法的产生式附加一些规则或程序片段而得到的 功能:给定词法单元流,通过向一个文法产生式附加一些语义动 作,语法制导分析产生语法分析树,并实现翻译动作 相关概念: 属性:表示与某个程序构造相关的任意的量,因为用文法符号(终结符号或非终结符号)来表示程序构造,所以可将属性的概念从程序构造扩展到表示这些构造的文法符号上 综合属性:如果某个属性在语法分析树节点N上的值由N的子节点和N本身的属性值确定,则该属性为综合属性,其性质为只需对语法分析树进行一次自底向

编译原理 语法分析器

当一个文法满足LL(1)条件时,我们就可以为它构造一个不带回溯的自上而下分析程序,这个分析程序是由一组递归过程组成的,每个过程对应文法的一个非终结符.这样的一个分析程序成为递归下降分析器. 例:一个支持 +,*,(,) 的简单文法为(用$表示空字符): E -> TE' E -> +TE' | $ T -> FT' T' -> *FT' | $ F -> (E) | i <编译原理> 第三版(陈火旺)P74: #include "iostream&quo

编译原理实验二:LL(1)语法分析器

一.实验要求 不得不想吐槽一下编译原理的实验代码量实在是太大了,是编译原理撑起了我大学四年的代码量... 这次实验比上次要复杂得多,涵盖的功能也更多了,我觉得这次实验主要的难点有两个(其实都是难点...): 1. 提取左公因子或消除左递归(实现了消除左递归) 2. 递归求First集和Follow集 其它的只要按照课本上的步骤顺序写下来就好(但是代码量超多...),下面我贴出实验的一些关键代码和算法思想. 二.基于预测分析表法的语法分析 2.1 代码结构 2.1.1  Grammar类    功

编译原理——算符优先分析文法(附源代码)

算符优先分析文法 一.写在前面 算符优先分析文法是一种工具,在编译的过程中,隶属于语法分析环节,却又与中间代码的生成息息相关,编译可以分为五个阶段:词法分析.语法分析.语义分析(中间代码的生成).代码优化.目标代码生成.语法分析是指:在词法分析基础上,将单词符号串转化为语法单位(语法范畴)(短语.子句.句子.程序段.程序),并确定整个输入串是否构成语法上正确的程序.也就是说语法分析是检验输入串的语法是否正确,注意这里的语法正确,只是简单地符合自己定义的规范,而不能检测出运行时错误,比如"X/0&

编译原理123

1.编译原理就是什么? 个人理解,编译就是像翻译一样,将一种语言翻译成另一种语言,编译就是将高级语言或汇编语言翻译成电脑能识别的二进制机器语言,编译原理就是讲解这 个编译的过程.内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码生成.存储管理.代码优化和目标代码生成. 编译原理是计算机专业设置的一门重要的专业课程.虽然只有少数人从事编译方面的工作,但是这门课在理论.技术.方法上都对学生提供了系统而有效的训练,有 利于提高软件人员的素质和能力. 2.学习编译原理有什么好处? 学习编译原