2010-08-13 74 views
3

我不知道哪裏是語法規範和語義分析之間的界線。更好的方法是:使用詳細的語法描述還是留出語義階段的細節?例如:想象一個面向對象的語言,如C#與枚舉類型,這可從一個基本類型「派生」語法與語義分析

enum X : int { a = 1 } 

現在,應的正確性(在這種情況下:原始或非原始類型)鹼基的枚舉類型是語法檢查還是語義分析的主題?

+0

這本書做得很好描述在不同層實現語言特性的一些折衷:http://pragprog.com/titles/tpdsl/language-implementation-patterns但我必須承認,我還不能肯定它直接解決了這個問題。 – sarnold 2010-08-13 09:37:13

+0

我讀過那本書,缺乏這些信息讓我在這裏提問。我認爲我的問題純粹是理論上的。我想知道哪種方法更好。 – 2010-08-13 10:12:16

回答

2

這是一個非常廣泛的問題。還有很多其他的考慮因素,在所有情況下,簡單地說一種策略比另一種策略更好是非常困難的。這取決於你的目的和其他語言的定義。如果語言的其他部分是固有語法上不明確(並且必須使用語義信息被消除歧義),那麼它的明顯的是,有必要執行任務語義分析的步驟。

這就是說,我是儘可能早地捕獲所有錯誤的粉絲。如果你的語言和目標允許你分析你輸入的完全明確的語義表達,而不需要任何語義分析,以拒絕無效的程序,那麼我相信會遠遠是最好的辦法。

基本上,您絕對會平衡您儘早拒絕錯誤程序的能力,其語法和解析器的複雜性以及語法描述和語義分析階段之間的重複工作。我不相信以一種方式做事比另一種做法更好。