知识卡片
形式文法用结构消除自然语言的歧义
内容
自然语言允许同一句话有多种合理解读,程序设计语言却不能容忍这种歧义,因为翻译器必须为每一段代码得出唯一确定的结构(语法分析树)。经典的例子是嵌套的 if-else 语句”if B1: if B2: S1 else: S2”——else 到底该配对给内层的 B2 还是外层的 B1,两种理解在逻辑上完全不同,如果语言的文法规则本身没有排除这种二义性(称为多义文法),翻译器就无法可靠工作。解法是靠语言设计本身消除歧义,而非靠上下文猜测:Python 用强制缩进来显式标出配对关系,C 系语言则强制 else 总是匹配最近的未配对 if 并鼓励用大括号显式分组。发散:这揭示了”精确”和”简洁”之间一个不可回避的张力——自然语言的表达效率来自于允许省略和依赖上下文推断,而形式语言要保证机器能唯一确定地解析,就必须放弃这种省略的自由,用更啰嗦但无歧义的规则替换掉直觉上”看起来懂了”但实际上存在多解的表达方式。
参考来源
《计算机科学概论》第6章《程序设计语言》