在學校裏,我們被分配去設計一門語言,然後實施它(我有很多樂趣實現它=))。我的老師告訴我們使用YACC /法,但我決定去與Java +正則表達式API,這裏是語言我如何設計外觀:語法分析問題
Program "my program"
var yourName = read()
if { equals("guy1" to yourName) }
print("hello my friend")
else
print("hello extranger")
end
Program End
好吧,你可以看到,它的一個非常基本的語言=)。
我以爲我能實現它在一個非常OOP的時尚,就像讓一個抽象類Sentence
,然後讓子類像VariableAssignment
,IfSentence
等,並有一個類Program
這僅僅是一串句子正確的?然後調用一個抽象方法eval
所有Sentence
S,所以我最初的做法complie語言僅包括兩個階段:
- 確定SEACH行的語法
- 每行
當然,如果在任何階段出現問題,Ii都可能引發錯誤。
我的問題是,我做錯了嗎?我是否應該像理論說的那樣遍歷所有階段(詞彙,語法,語義)?我應該繼續使用我的天真的兩階段編譯器嗎?
大錯誤。你應該學習解析,而不是用正則表達式來解決問題。您應該切換到使用Java解析系統(如Jack),或者更好的方法是使用BYACC/J http://byaccj.sourceforge.net/,以便您更好地與類同步。 – 2009-11-11 15:56:38