2013-05-12 82 views
3

我正在用我自己的腳本語言構建一個像編譯器一樣的應用程序。用戶將輸入代碼,輸出將是另一個應用程序。 所以我需要告訴用戶,如果一些線路是錯誤的,爲什麼。構建語法檢查器

但我不知道該如何開始。

我認爲這樣: 所有行都以關鍵字開頭,除了那些以變量開頭的行。不同的是錯的。 所以,我可以計算下一個有效的條目並檢查它們。

另外,我想,我可以檢查每一行,但它是複雜的,因爲我可以有這個

var varName { /* ... */ }; 

或者

var varName { 
/* ... */ 
}; 

甚至

var varName 
{ 
/* ... */ 
}; 

那麼爲什麼不刪除折線並檢查?因爲我會失去在這種情況下最重要的行號。 也許我會在有和沒有折線的代碼之間創建一個地圖。

但首先我想聽到你,如果你已經有這種經歷或者你有任何想法。

感謝

回答

1

有正式的語言來描述語法和語言的語義,並且有將產生解析器這些描述的工具。我建議閱讀flex和野牛的初學者。

1

編寫自己的語言會相當複雜。但完全可行。

爲了能夠識別行是錯誤的,在語法上,您需要構建解析器。 解析器檢查上下文無關文法,以從其令牌正確導出結構。

首先,您需要標記文件,然後將其重構爲分析樹(以檢查語法)。

我參加了這個課程,CS 241.有一套非常好的課程筆記,這些都詳細解釋。 https://github.com/christhomson/lecture-notes/blob/master/cs241.pdf

+0

謝謝@ sunapi386,將是有用的 – lcssanches 2013-05-12 22:03:36

1

您應該檢查類似的工具:lexbisonyacc

lex是詞法分析器生成器。它生成一個代碼,可用於將腳本分解爲令牌(如數字,關鍵字等)。

bisonyacc都是解析器生成器。兩者都可用於生成解析語言的代碼(將令牌與語句組合在一起)。

只是谷歌教程這些工具。

+0

我剛剛閱讀關於反諷項目http://irony.codeplex.com/。我不太確定,但我認爲我可以使用它。 – lcssanches 2013-05-12 22:01:08