2017-08-10 144 views

回答

1

自然語言相當靈活。

此外,自然語言通常無法通過上下文無關語法完全描述。例如,在英語中,「分別」從句(連同其他一些結構)混淆了語法。當然,neither C# nor Java are context-free either(雖然this article聲稱有早期C#的上下文無關語法),但編程語言更可能有上下文無關文法。

最大的不同在於,自然語言的語法都允許歧義,而編程語言經過精心設計以避免歧義。考慮以下聲明:

凱文看到約翰望遠鏡在公園裏。

誰在使用望遠鏡 - 約翰還是凱文?他們中哪些人在公園裏 - 凱文,約翰還是望遠鏡?一些解釋:

  • 望遠鏡在公園裏。約翰正在使用它。凱文在使用它時看到了約翰。
  • 約翰在公園裏。凱文用望遠鏡在公園看着約翰。
  • 望遠鏡在公園裏。凱文用它來看約翰。
  • 等等

編程語言精心設計,以避免你能寫下這樣的句子。