1. 基本含义
上下文无关的意思不是和什么都没关系,它是一个相对的概念,即:
上下文无关文法是指,在规定的语法公式(例如用BNF描述的语法公式)内上下文相关,在语法公式外与其他内容无关。仅仅通过公式就能进行语法解析,不依赖其他信息,把它剪切到其他任何位置,也还是原有的意思,还可以一样解析。
人类的语言则不然,一句话经常需要放到特定的上下文,即语境中去理解,更加灵活。很显然,上下文无关文法,是自然语言的简化版本。
2. 上下文无关的优点
- 便于设计编译器。
试想一下,如果可以用自然语言写代码,那不就是实现了人工智能了吗?客观上技术目前无法实现。 - 便于代码开发维护。
如果开发出来的代码像高考的语文阅读理解一样,每个人都有不同的理解,那么,到底哪个才是作者真正想要表达的?如果人类都确定不了含义,那计算机同样也确定不了,最终结果就是错误执行或无法执行。 - 汇编语言/机器语言是上下文无关的。CPU执行指令时,读到哪条执行哪条。如果CPU需要考虑上下文,来决定一个语句到底要做什么,那么CPU执行一条语句会比现在慢千倍万倍。考虑上下文的事情,完全可以用户在编程的时候用算法实现。既然机器语言是上下文无关的,那高级语言也基本上是上下文无关的,可能有某些个别语法为了方便使用,设计成了上下文相关的,比如脚本语言的弱类型。在便于使用的同时,增加了解析器的复杂度。
综上,编程语言,不管是编译型语言,还是脚本型语言,都采用上下文无关的文法设计语法。