提到“编译原理”,大部分人的首要反应就是苦恼。确实,编译原理这一部分的内容在计算机学习中是比较难以理解的一部分。首次接触编译原理,我也感觉很复杂,难以理解。但是当看过几次之后,对于一些简单知识点的理解就有点眉目了。在这里就将有点眉目的知识写一下。

学习编译原理接触的第一个重要的概念就是——文法。那么什么是文法呢?

文法,语言中的每个句子可以用严格定义的规则来构造。通俗的讲就是:根据一些指定的规则,来确定编程语言的语法,从而实现编译器的功能。

那么文法是如何表示的呢?

文法是由非终结符(大写字母)和终结符(小写字母)以及“—>”组成的。给出几个例子就容易理解了。

A—> a、B—>dba、S—> Ab、adB—>d

通过上面的几个例子可以看出:非终结符A、B、S,一般是写在左边,而终结符a、dba、b,一般是写在右边的。当然习惯的写法是非终结符用S(Start)表示,写在左边,自然而然的小写的就在右边了,这样也便于我们记忆文法的表示方式。

话说,在1956年的春天,一个叫乔姆斯基(Chomsky)的人发明了上述文法,他觉得有些文法存在着相似的形式,于是他就给文法分了一下类。

首先有一个前提:设有一个组合G=(Vn,Vt,P,S)。其中Vn是非终结符的集合,Vt是终结符的集合,P是推导式的一个集合,S是开始符。就上面的例子来说,A、B、S是Vn,a、dba、b是Vt,整个的集合为P。

0型文法

这是最简单的一个文法。它比较宽容,没有那么多的限制条件。左边必须要包含这些元素或者元素组合中的至少一个非终结符,右边可以是这些元素的任意组合,这样就构成了0型文法。由于限制最少,所以见到的文法至少是一个0型文法。如:A—> a

1型文法(上下文有关文法)

它在0型文法的基础之上,只添加了一个要求:右边的长度>=左边的长度(终结符或非终结符的个数)。A—> a、B—>dba则是1型文法,而adB—>d不符合1型文法要求

注意这里有一个特殊的形式  S—> ∑(∑表示空),也是一个1型文法。

2型文法(上下文无关文法)

它在1型文法的基础上,有增加了一个要求:左边必须是非终结符(个数不限)。

如:AB—>de 属于2型文法,而 Aa—>DE则不是,因为Aa中含有a。

3型文法(正规文法)

它是在2型的基础上提出了要么一个非终结符推出一个终结符,要么一个非终结符推出一个终结符并且带一个非终结符。

而上图中的左线性、右线性是相互独立的。如:A—>b、A—>bD这是3型文法

但是A—>b、A—>bD、A—>Db则不是3型文法。从这里可以看出,对于3型文法,它不是左右线性的“组合”,要么都是右线性,要么都是左线性。

好了,关于文法就说这么对。对于文法还是通过实战来促进理解比较好。

转载自: https://blog.csdn.net/aboy123/article/details/7982813

编译原理文法等价变换相关推荐

  1. #编译原理# 文法和内容(二)

    文法和内容 编译原理笔记第二部分,内容参考:北航软院教师邵兵课堂课件及内容.张莉著<编译原理及编译程序构造>.国防工业出版社的<编译原理--学习指导与典型题解析>.AlvinZ ...

  2. 编译原理——文法的基本概念

    文法的概念 每一种自然语言或者是编程语言都需要文法来描述,文法相当于语言学的语义分析,即分析每一句话所表示的含义,编译器需要利用文法来完成其语法分析和语义分析. 在目前编程语言领域,上下文无关文法作为 ...

  3. 编译原理-正则文法与正则表达式的相互转化

    正则文法与正则表达式的相互转化 前言 一.正则文法 1.定义 2.例子 二.正则表达式 1.定义 2.例子 三.转换规则 1.正则文法转换为正则表达式 2.正则表达式转换为正则文法 四.转换例子 1. ...

  4. 编译原理实验c语言cfg文法,编译原理

    地址在符号表中引入指针previous,来连接上一个符号的首地址运行时存储空间组织活动记录用于管理函数变量的信息栈式存储过程进入和返回通过变更top和sp指针,实现活动记录的栈式处理静态链实现局部变量 ...

  5. 软件工程专插本_2021年软件工程专业-编译原理-考试大纲(专插本).docx

    吉林大学珠海学院 2021 年本科插班生招生考试 < 软件工程 >专业课程考试大纲 考试科目名称: 编译原理 一.考试的内容.要求和目的 第 1 章 引论 (考核比重:10%) (一)课程 ...

  6. 《编译原理》复习第1章~第5章

    前言 练习题来自超星<吉林大学编译原理>课程的章节测验和作业,全文仅为自己学习使用,如果有错,欢迎指正. 课时安排(课程重点) 2.4-2.7:正则式描述单词和确定有限自动机(DFA)部分 ...

  7. 三万五千字长文!让你懂透编译原理(六)——第六章 属性文法和语法制导翻译

    三万五千字长文!让你懂透编译原理(六)--第六章 属性文法和语法制导翻译 长文预警 系列文章传送门: 万字长文+独家思维导图!让你懂透编译原理(一)--第一章 引论 万字长文!让你懂透编译原理(二)- ...

  8. 【编译原理核心知识点总结】第三章、正则文法、NFA、DFA

    阅读规范: 本文以重点为主,零碎知识点/相对不够重要的为辅助阅读内容,以脚注形式给出,点击脚注即可快速跳转. 助解题目通常是为了帮助理解给出的题目,考试不考,若已理解可直接跳过. 文中提到的课本是陈火 ...

  9. 编译原理学习(到LL1文法部分)

    今天终于开始着手把一年前学的编译原理整理一下啦!打败拖延症 #*# 机器语言:计算机只认识由0和1构成的机器语言,每台机器自己独特的指令系统即机器语言. 机器语言->汇编语言->高级语言 ...

  10. 编译原理四种文法的理解补充

    如果你是学习,给定一个文法,判断是哪一个文法的话,那这篇不是讲这个,只是一点小小的理解补充. 四种文法如下: 补充: 1.0型文法,即递归可枚举文法相当于图灵机是指: 给定一个文法G,一个句子g,如果 ...

最新文章

  1. 贝叶斯深度学习2020 最新研究总结
  2. 用python做系统程序_新手小白做毕设,想用Python做一个系统,那么该学习哪方面的知识?...
  3. C#获取指定坐标点像素,效率更高快
  4. 高级会计师资格考试成绩合格证在全国范围内几年有效
  5. python虚拟环境 virtualenv工具
  6. 在SAP CRM呼叫中心里创建Service Request的实现技术
  7. 互联网产品 从设计到运营 这中间提高须要关注的站点
  8. java数组怎么倒循环_java – 用于数组倒计时的反向循环
  9. 回家了,写博文继续!
  10. 话里话外:80后,那人生初始最关键的一步
  11. Python学习入门基础教程(learning Python)--5 Python文件处理
  12. 天津检验检疫局完成核心业务容灾备份系统建设
  13. 冰点文库下载器的使用
  14. 用户运营day3——用户生命周期与用户成长路径的策略运营
  15. mybatis sql 按照特定的字段顺序排序,按照拼音首字母排序
  16. 关于ruoyi框架整合ueditor富文本编辑器
  17. Google公布软件网络负载均衡器Maglev
  18. 我的世界java版mac切视角_我的世界怎么视角切换攻略 第三人称视角
  19. mysql 梭镖_FreeBSD.6.2服务器架设视频教程下载_IT教程网
  20. 自学(网站制作,FLASH,PS,3D)一定要看

热门文章

  1. learning docker steps(3) ----- docker services 初次体验
  2. 结对编程--基于android平台的黄金点游戏(2.0版本)
  3. 什么是js面向对象??
  4. PD的几种文档【转】
  5. express 设置handlebars模板引擎
  6. 批处理(bat)没有后缀的文件怎么复制?
  7. AjaxPro.Dll运用
  8. 07. (附加)用两个队列实现栈(C++版本)
  9. 23. 考虑用排序的vector替代关联容器
  10. 每天一道剑指offer-链表中环的入口节点