2011-01-12 61 views

回答

3

任何區別將是微不足道的。 這是因爲一種不使用這種最終分隔符的語言,實際上已經以換行符的形式出現了!然後這些將使用特殊字符標記該語句繼續到下一行。

有幾個都沒有,但是在那裏,聲明的結尾是隱含在定義中的 - 例如。關閉')'在參數列表的末尾。如果有逗號(或沒有),那麼更多的參數或封閉的')'將在下一行預計。

在大事情中,這些微小的差異對處理時間的影響可以忽略不計。對於腳本語言,根據是否可以內部優化特定語句構造(或多少),您將會有更大的差異。

+2

好吧,作爲一個奇怪的例子,JavaScript並不總是*需要換行符,但它有關於如果分號不存在的含義的有趣規則。構建JavaScript解析器後,我可以確認存在或不存在不會在解析時間方面產生顯着差異。 – 2011-01-12 18:50:35

2

表現明智沒關係。

如果你想一想,總會有一個分隔符,如果它不是;那麼它是EndOfLine(\ n)

所以你仍然用相同的方式解析代碼腳本。解析器不會介意它是否是可見字符或不可見字符的分隔符。

可見定界符唯一有用的是讓編程人員編寫多行腳本行,這可能很有用。多行腳本行可以讓程序員在某些情況下編寫更連貫的代碼。 (只是將EndOfLine解析爲一個空格)

2

所有語言我知道,不需要顯式的輸入語句分隔符或終結符,而是使用換行符 - 在少數情況下,除了行在parens,大括號,括號等內部的斷開被忽略(隱式行連續)。一個小的差異,它對解析速度的影響將很大程度上取決於解析器(或解析器生成器)。如果允許隱式行延續(因爲您必須區分換行符和語句分隔符,但在解析過程中可以相對較早地排除它,除非您爲其創建了令人難以置信的複雜規則),那麼編寫解析器可能會稍微困難一些。

但是:即使存在巨大差異,也不會影響運行時性能。除非程序無論如何不重要,因爲它們相當短和/或I/O限制(或者特別愚蠢的實現拒絕創建任何IR,而是在源代碼解釋時,使用編寫不好的解析器),解析最多隻會在啓動時發生一次(今天的「腳本」語言主要編譯爲字節碼,並且主要在運行之間緩存該字節碼),然後在程序花費其實際傳遞時被遮蔽。不要爲了速度而在語言設計上進行權衡。或者如果是這樣,則正確地執行,例如, C.

一個更有趣的問題是明確的塊分隔符與越位規則。標記器已經可以解決這個問題,但是大多數解析生成器/庫不(很容易)給你這樣一個解析器。少數人會這樣做,在這種情況下,這種差別是不可忽視的,但它不像「自由形式」的語言那樣受到廣泛支持。