2017-08-10 94 views

回答

1

自然语言相当灵活。

此外,自然语言通常无法通过上下文无关语法完全描述。例如,在英语中,“分别”从句(连同其他一些结构)混淆了语法。当然,neither C# nor Java are context-free either(虽然this article声称有早期C#的上下文无关语法),但编程语言更可能有上下文无关文法。

最大的不同在于,自然语言的语法都允许歧义,而编程语言经过精心设计以避免歧义。考虑以下声明:

凯文看到约翰望远镜在公园里。

谁在使用望远镜 - 约翰还是凯文?他们中哪些人在公园里 - 凯文,约翰还是望远镜?一些解释:

  • 望远镜在公园里。约翰正在使用它。凯文在使用它时看到了约翰。
  • 约翰在公园里。凯文用望远镜在公园看着约翰。
  • 望远镜在公园里。凯文用它来看约翰。
  • 等等

编程语言精心设计,以避免你能写下这样的句子。