2011-04-05 68 views
0

我正在構建一個小規模的解釋器。到目前爲止,我有能力計算數學表達式,包括 變量和幾個函數(如MOD,MAX等)。我需要增加兩個功能:實現操作符重載和內聯函數

在線運算符重載運算符 重載是指 新的運營商,其 有你 現有功能

因此,例如一個的功能創建一個術語輸入過載 後*#POW,3 *#2將導致9

聯函數創建另外 到操作符重載,你還會 需要蘇pport內聯功能 creation4。換句話說,你會 支持新的功能, 使用以下語法創建:直列 _FUNC {@ ARG1,ARG2 @ ...}

所以,我不知道從哪裏開始。如果任何人都可以將我鏈接到某處,那麼我可以閱讀有關已知技術或現有的可幫助我的java工具 ,這將非常有幫助。我甚至不知道要尋找什麼。謝謝!

+5

你之前詢問過13個問題,甚至沒有收到過其中之一 – dacwe 2011-04-05 16:52:23

+0

這是功課嗎?如果是這樣,請用「家庭作業」標籤標記問題。 – 2011-04-05 16:59:43

+1

我不知道我應該接受。我現在會研究它 – yotamoo 2011-04-05 17:00:12

回答

0

你需要處理的新的關鍵詞,而在你的詞法分析器執行詞法分析。例如,如果用戶輸入overload *# POW,則詞法分析器應該能夠識別3個標記:「overload」,「*#」和「POW」。同樣,對於函數的創建,你的詞法分析器需要標記大括號(大括號之間的空白/換行符不重要)。

接下來,你需要修改解析器,並建立一個語法樹。例如,在對3 *# 2執行語法分析之後,您的語法樹應該能夠識別什麼是運算符以及什麼是操作數。

最後一步是運行語法樹並解釋/評估結果。

至於工具,還有詞法分析器和解析器生成器。如果您的詞法分析器和解析器已經有一些現有的代碼,我建議您避免使用這些工具,並對現有代碼進行必要的修改。