我想知道關於性能(如果它是一種腳本語言)結束分隔符的影響,並且易於解析語言。
解析一個有語言的語言更容易嗎?
如果是,並且該語言是腳本語言,它會使語言運行命令更快嗎?解析帶有結尾分隔符(例如';')的語言比沒有語言更有效嗎?
回答
任何區別將是微不足道的。 這是因爲一種不使用這種最終分隔符的語言,實際上已經以換行符的形式出現了!然後這些將使用特殊字符標記該語句繼續到下一行。
有幾個都沒有,但是在那裏,聲明的結尾是隱含在定義中的 - 例如。關閉')'在參數列表的末尾。如果有逗號(或沒有),那麼更多的參數或封閉的')'將在下一行預計。
在大事情中,這些微小的差異對處理時間的影響可以忽略不計。對於腳本語言,根據是否可以內部優化特定語句構造(或多少),您將會有更大的差異。
表現明智沒關係。
如果你想一想,總會有一個分隔符,如果它不是;那麼它是EndOfLine(\ n)
所以你仍然用相同的方式解析代碼腳本。解析器不會介意它是否是可見字符或不可見字符的分隔符。
可見定界符唯一有用的是讓編程人員編寫多行腳本行,這可能很有用。多行腳本行可以讓程序員在某些情況下編寫更連貫的代碼。 (只是將EndOfLine解析爲一個空格)
所有語言我知道,不需要顯式的輸入語句分隔符或終結符,而是使用換行符 - 在少數情況下,除了行在parens,大括號,括號等內部的斷開被忽略(隱式行連續)。一個小的差異,它對解析速度的影響將很大程度上取決於解析器(或解析器生成器)。如果允許隱式行延續(因爲您必須區分換行符和語句分隔符,但在解析過程中可以相對較早地排除它,除非您爲其創建了令人難以置信的複雜規則),那麼編寫解析器可能會稍微困難一些。
但是:即使存在巨大差異,也不會影響運行時性能。除非程序無論如何不重要,因爲它們相當短和/或I/O限制(或者特別愚蠢的實現拒絕創建任何IR,而是在源代碼解釋時,使用編寫不好的解析器),解析最多隻會在啓動時發生一次(今天的「腳本」語言主要編譯爲字節碼,並且主要在運行之間緩存該字節碼),然後在程序花費其實際傳遞時被遮蔽。不要爲了速度而在語言設計上進行權衡。或者如果是這樣,則正確地執行,例如, C.
一個更有趣的問題是明確的塊分隔符與越位規則。標記器已經可以解決這個問題,但是大多數解析生成器/庫不(很容易)給你這樣一個解析器。少數人會這樣做,在這種情況下,這種差別是不可忽視的,但它不像「自由形式」的語言那樣受到廣泛支持。
- 1. 有沒有比HTML更好的佈局語言來打印?
- 2. 有更高階條件的語言嗎?
- 3. 語言服務:有沒有辦法強制解析?
- 4. 多語言網站沒有更改語言
- 5. 語言字符串解析
- 6. 什麼語言沒有循環結構?
- 7. 解析這種腳本語言的最有效的方法
- 8. 更改地圖語言 - 有可能嗎?
- 9. 術語語言和語言實現有區別嗎?
- 10. 如何從沒有國家的語言獲取語言CultureInfo
- 11. 有沒有完整的元語言?
- 12. 如果語言沒有語言代碼會怎麼樣?
- 13. Stata編程語言沒有語法?
- 14. 沒有語言運行時的基於JVM的語言
- 15. 有沒有另一種語言像JavaScript?
- 16. Photoshop - 有沒有一種編程語言?
- 17. 有沒有用「真實」語言抽取引理的例子?
- 18. 沒有ELSE關鍵字的編程語言 - 它更復雜嗎?
- 19. (Javascript-HTML Parser)可以使用javascript解析沒有服務器語言的html嗎?
- 20. 如何用同一種語言實現一種語言比語言更快?
- 21. 在Ionic2上更改語言 - 更改所有頁面語言的最有效方法是什麼?
- 22. 有沒有帶子程序的語言,但沒有局部變量?
- 23. 有沒有嵌入Tensorflow語言模型的語句?
- 24. 序言自然語言解析
- 25. 所有語言 - 程序效率
- 26. 沒有標準庫的語言引擎
- 27. 沒有OOP語言的Windows編程
- 28. 沒有語言標註的主頁
- 29. 沒有fopen的讀文件()(C語言)
- 30. 自然語言理解 - 分析
好吧,作爲一個奇怪的例子,JavaScript並不總是*需要換行符,但它有關於如果分號不存在的含義的有趣規則。構建JavaScript解析器後,我可以確認存在或不存在不會在解析時間方面產生顯着差異。 – 2011-01-12 18:50:35