自然语言 (natural language) 是人们交流所使用的语言,例如英语、汉语等。 它们不是人为设计出来的(尽管有人试图这样做),而是自然演变而来的。
形式语言(formallanguages)是人类为了特殊用途而设计出来的。例如,数学家使用的记号(notation)就是形式语言,特别擅长表示数字和符号之间的关系。化学家使用形式语言表示分子的化学结构。最重要的是编程语言是被设计用于表达计算的形式语言。
形式语言通常拥有严格的语法规则,规定了详细的语句结构。
语法规则有两种类型,分别涉及记号(tokens)和结构。记号是语言的基本元素,例如单词、数字和化学元素等。结构与标记的组合方式有关,例如,在数学中3 + = 3非法,在化学式中,下标位于元素之后,而不是之前,例2HO。
当你读一个用英语写的句子或者用形式语言写的语句时,你都必须要理清各自的结构 (尽管在阅读自然语言时,你是下意识地进行的)。这个过程被称为解析 (parsing)。
虽然形式语言和自然语言有很多共同点 — 标记、结构和语法,它们也有一些不同:
歧义性(ambiguity): 自然语言充满歧义,人们使用上下文线索以及其它信息处理这些歧义。形式语言被设计成几乎或者完全没有歧义,这意味着不管上下文是什么, 任何语句都只有一个意义。
冗余性(redundancy): 为了弥补歧义性并减少误解,自然语言使用很多冗余。结果, 自然语言经常很冗长。形式语言则冗余