【编译原理】什么是上下文无关文法?
上下文无关是指,一句话的含义与其前后的内容没有或者几乎没有关系,只由自己决定,把它剪切到其他任何位置,也还是原有的意思。
例如:
...
a = 0;
...
这是一个赋值语句,无论此语句的前后是什么代码,此语句所代表的操作是确定的。即:
给变量a赋予值0
换句话说,CPU遇到什么语句就执行什么语句,不用管其他的。
编程语言为什么不用人类的语言(自然语言),而是用上下文无关的文法呢?
因为
- 便于设计编译器。
试想一下,如果可以用自然语言写代码,那不就是实现了人工智能了吗?客观上技术目前无法实现。 - 便于代码开发维护。
如果开发出来的代码像高考的语文阅读理解一样,每个人都有不同的理解,那么,到底哪个才是作者真正想要表达的?如果人类都确定不了含义,那计算机同样也确定不了,最终结果就是错误执行或无法执行。 - 汇编语言/机器语言是上下文无关的。CPU执行指令时,读到哪条执行哪条。如果CPU需要考虑上下文,来决定一个语句到底要做什么,那么CPU执行一条语句会比现在慢千倍万倍。考虑上下文的事情,完全可以用户在编程的时候用算法实现。既然机器语言是上下文无关的,那高级语言也基本上是上下文无关的,可能有某些个别语法为了方便使用,设计成了上下文相关的,比如脚本语言的弱类型。在便于使用的同时,增加了解析器的复杂度。
综上:编程语言基本上都采用上下文无关的原则设计语法。
附:
上下文无关文法—维基百科
【编译原理】什么是上下文无关文法?相关推荐
- 《编译原理》-3.上下文无关文法及分析
上下文无关文法及分析 3.1 分析过程 3.2 上下文无关文法 3.2.1 与正则表达式的比较 3.2.2 上下文无关文法规则的说明 3.2.3 推导及由文法定义的语言 3.3 分析树与抽象语法树 3 ...
- 上下文无关文法的分析树(Context-Free Grammar, CFG)的分析树--编译原理
上下文无关文法的分析树(Context-Free Grammar, CFG)的分析树 分析树 根节点的符号为文法开始符号S 每个内部节点都是对某个产生式A→β的应用,该节点的标号就是产生式的左部,子节 ...
- 【编译原理】构造产生如下语言的上下文无关文法各一个:
13.构造产生如下语言的上下文无关文法各一个: (1) (an bm c2m | n,m≥0 } S->AB A->ε|aA B->ε|bBcc (2) w c wR| w∈{a,b ...
- 编译原理学习(到LL1文法部分)
今天终于开始着手把一年前学的编译原理整理一下啦!打败拖延症 #*# 机器语言:计算机只认识由0和1构成的机器语言,每台机器自己独特的指令系统即机器语言. 机器语言->汇编语言->高级语言 ...
- 句法模式识别(两)-正规文法、上下文无关文法
正规的语法特点 1.全部长度有限的语言都是正规的. 2.用正规文法当然能产生无限长串,当中周期反复部分的长度不大于非终止符的长度. 举个样例 在此规则之下.能生成句子 当中周期反复部分为ab,这个样例 ...
- 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★
文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 2 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...
- 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★
文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 1 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...
- 【计算理论】计算理论总结 ( 下推自动机计算过程 | 上下文无关文法 CFG 转为下推自动机 PDA ) ★★
文章目录 一.下推自动机计算过程 二.上下文无关文法 CFG 转为下推自动机 PDA 流程 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 ...
- 上下文无关文法及其分析树
上下文无关文法是程序设计语言所使用的语法.它的特点是同样的字符串在不同的语境下,意思不变.满足上下文无关文法的语言便于计算机识别和处理.我们已经介绍过,语言是语句的集合,而语句是通过产生式定义的.上下 ...
最新文章
- sql server 2005 T-SQL @@TOTAL_READ (Transact-SQL)
- 4种最常问的编码算法面试问题,你会吗?
- 物理机存放mysql实例原则_MySQL数据库规范 (设计规范+开发规范+操作规范)
- 用python tkinter显示Mandelbrot图
- 如何应对“中年危机”
- c++从入门到进阶--引用与常量
- 数据结构与算法--力扣109题将有序双向链表转换为二叉搜索树
- 他们调查了3.9万名程序员,制作了这份开发者技能报告
- mui栅格布局的两种方式(grid和list,宫格和列表)
- duilib学习领悟(2)
- dylib java_使用单声道可执行文件捆绑.dylib文件
- L1-057 PTA使我精神焕发 (5 分)-PAT 团体程序设计天梯赛 GPLT
- tcpdump非常实用的抓包实例
- [JLOI2014]松鼠的新家 倍增LCA+树上差分
- mongodb在ubuntu下无法打开的问题
- PRML Chapter 02 Probability Distributions
- 【学习笔记】福州大学网络课程 网络空间安全概论(1,4)
- 十大企业级Linux服务器安全防护要点
- 鸡兔同笼html语言,鸡兔同笼有哪五种方法
- FOP生成PDF中文乱码问题解决
热门文章
- 关于android:windowNoTitle不起作用的解决办法
- [每日一题] 11gOCP 1z0-052 :2013-09-1 RMAN-- repair failure........................................A20...
- Objective-C 的OOP(下)-类(static)方法、实例方法、overwrite(覆写)、属性(property)...
- set row count
- Hihocoder #1631 : Cats and Fish 模拟
- oracle sql-1,Oracle – Oracle SQL(1)
- php全局cors,PHP开启CORS - slagga的个人页面 - OSCHINA - 中文开源技术交流社区
- redis 登录_Redis集群架构+Dubbo开发框架+SSO单点登录+Nginx+ZooKeeper
- arm for asterisk1.8
- pjsua帮助手册(中文)