上下文无关是指,一句话的含义与其前后的内容没有或者几乎没有关系,只由自己决定,把它剪切到其他任何位置,也还是原有的意思。
例如:
...
a = 0;
...
这是一个赋值语句,无论此语句的前后是什么代码,此语句所代表的操作是确定的。即:
给变量a赋予值0
换句话说,CPU遇到什么语句就执行什么语句,不用管其他的。
编程语言为什么不用人类的语言(自然语言),而是用上下文无关的文法呢?
因为
- 便于设计编译器。
试想一下,如果可以用自然语言写代码,那不就是实现了人工智能了吗?客观上技术目前无法实现。 - 便于代码开发维护。
如果开发出来的代码像高考的语文阅读理解一样,每个人都有不同的理解,那么,到底哪个才是作者真正想要表达的?如果人类都确定不了含义,那计算机同样也确定不了,最终结果就是错误执行或无法执行。 - 汇编语言/机器语言是上下文无关的。CPU执行指令时,读到哪条执行哪条。如果CPU需要考虑上下文,来决定一个语句到底要做什么,那么CPU执行一条语句会比现在慢千倍万倍。考虑上下文的事情,完全可以用户在编程的时候用算法实现。既然机器语言是上下文无关的,那高级语言也基本上是上下文无关的,可能有某些个别语法为了方便使用,设计成了上下文相关的,比如脚本语言的弱类型。在便于使用的同时,增加了解析器的复杂度。
综上:编程语言基本上都采用上下文无关的原则设计语法。
附:
上下文无关文法—维基百科