為什麼很多程式語言採用花括號區分 block 而非縮排?

時間 2021-05-10 01:55:51

1樓:夏雨婷

縮排的處理難度可能是次要的。

我沒看過哪本書專門講了縮排怎麼處理,不過我個人認為,縮排不是語法分析問題,而是詞法分析問題。乙個一層的縮排就是Indent(1), 兩層的則是Indent(2),也就是詞法分析的時候符號型別多加乙個引數而已,之後語法分析該怎麼處理還是怎麼處理,無非是:

(1)詞法分析時插入軟括號;

(2)詞法分析和語法分析之間加一道流程;

(3)語法分析時才處理縮排。

也許原因僅僅是,實現者和標準制定者認為「大家都用花括號,所以我也用」,於是這個規則就被所有程式語言繼承下來了。

2樓:

用{}這樣顯式的區分相對來說比較容易處理,我感覺受C影響比較大

自從學了Haskell之後,發現用縮排真的不錯,特別增加可讀性。

3樓:Rio

因為 C 的普及,使得之後的語言或多或少的借鑑了 C 的語法。你舉的例子裡面,除了 Perl,其他幾款的語法基本都是參照 C 設計的。

採用縮排方式區分 statement block 其實是少數,現在流行的也就 Python 和 Haskell 利用了這點。很多人並不習慣這樣(雖然實際使用中花括號總是配合縮排使用的)。

4樓:馮東

縮排是一種不可見字元。你不知道縮排的是空格還是tab,而且不同編輯器對tab的處理不同。所以用縮排非常容易產生編輯錯誤。

對上下文無關文法的parser來說,縮排也不如顯示的block識別符號容易處理。相對於begin/end來說,花括號輸入更快。

為什麼很多程式語言中不能直接列印陣列?

丁長老 函式式語言不清楚,說點我知道的。列印陣列需要有下面三個條件 1.陣列的長度 2.陣列中值的型別 3.陣列中值不存在迴圈引用 第一條陣列的長度,c語言就被乾掉了,c語言沒法獲取陣列的長度,其他語言,有容器功能的,或者單獨內建array類的,拿到長度不是問題。第二條,陣列中值的型別。求型別就要求...

程式語言為什麼區分常量和變數?

野龍 即使在實現上無區別,即使不存在優化問題,常量也是有用的。用途就是,明確的告訴你這個量不應該被改變,而且編譯器會保證你不會不小心去改變這個量。當然,你非要給cast成非常量來修改,編譯器也拿你沒轍就是了 李登淳 常量更容易優化,我自己寫的那個孱弱的編譯器只能優化常量。事實上很多編譯器能做到讓常量...

為什麼程式語言對非同步程式設計都是很晚近才開始支援的?

winter 其實async和await並不是所謂的 非同步 而是用同步的語法形式寫非同步的一種語法支援。所以如果我們要談非同步,那麼async await只是其中非常小的一部分內容。 打乎 多少跟和網際網路的發展有關吧,網際網路剛發展起來那會,哪有人會想到現在的那麼大的高併發,大量流量,大資料,這...