【编译原理】一、什么是上下文无关文法?

1. 基本含义

上下文无关的意思不是和什么都没关系,它是一个相对的概念,即:

上下文无关文法是指,在规定的语法公式(例如用BNF描述的语法公式)内上下文相关,在语法公式外与其他内容无关。仅仅通过公式就能进行语法解析,不依赖其他信息,把它剪切到其他任何位置,也还是原有的意思,还可以一样解析。

人类的语言则不然,一句话经常需要放到特定的上下文,即语境中去理解,更加灵活。很显然,上下文无关文法,是自然语言的简化版本。

2. 上下文无关的优点

  1. 便于设计编译器。
    试想一下,如果可以用自然语言写代码,那不就是实现了人工智能了吗?客观上技术目前无法实现。
  2. 便于代码开发维护。
    如果开发出来的代码像高考的语文阅读理解一样,每个人都有不同的理解,那么,到底哪个才是作者真正想要表达的?如果人类都确定不了含义,那计算机同样也确定不了,最终结果就是错误执行或无法执行。
  3. 汇编语言/机器语言是上下文无关的。CPU执行指令时,读到哪条执行哪条。如果CPU需要考虑上下文,来决定一个语句到底要做什么,那么CPU执行一条语句会比现在慢千倍万倍。考虑上下文的事情,完全可以用户在编程的时候用算法实现。既然机器语言是上下文无关的,那高级语言也基本上是上下文无关的,可能有某些个别语法为了方便使用,设计成了上下文相关的,比如脚本语言的弱类型。在便于使用的同时,增加了解析器的复杂度。

综上,编程语言,不管是编译型语言,还是脚本型语言,都采用上下文无关的文法设计语法。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撬动未来的支点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值