2013-09-25 100 views
0

我需要從腳本的一組輸入中爲例程和子例程生成一種腳本(星號OBD腳本),這是一種shell腳本。我需要用Java來完成。代碼生成使用哪種設計模式?我試圖模板模式和命令模式,但一半迷茫,停止。任何想法,設計,文檔和其他人將不勝感激。代碼生成 - 設計模式

下面是示例代碼。 注1:<>是作爲輸入提供的參數。 注2:嵌套的dtmf信息,取決於子程序的編碼。 讓我知道是否需要更多解釋。

[<context_name>] 
exten => answered,1,set(actionid=actionid:${ACTIONID}) 
same => n, wait(1) 
same => n, read(input,<file path>/<file>,1,,,10) 
same => n, gotoif($[${input}=1]?1pressed,1) 
same => n, gotoif($[${input}=2]?2pressed,1) 
same => n, noop("No/Invalid input") 
same => n,hangup 

exten => 1pressed,1,read(inputsub,<file path>/<play1>,1,,,10) 
same => n, gotoif($[${input}=1]?1subpressed,1) 
same => n, gotoif($[${input}=2]?2subpressed,1) 
same => n, noop("No/Invalid input") 
same => n,hangup 
same => n(1subpressed),playback(<file path>/<playsub11>) 
same => n,hangup 
same => n(2subpressed),playback(<file path>/<playsub12>) 
same => n,hangup 

exten => 2pressed,1,playback(<file path>/<play2>) 
same => n,hangup 


exten =>h,1, set(CDR(userfield)=$actionid) 
same => n, hangup 
+0

完全取決於代碼生成過程的規範。例如,如果您只需要吐出總是相同的代碼單元,那麼您就會採用其他技術,而不是生成針對給定語法的解析器的代碼。所以,不知道輸入是什麼,以及生成的腳本應該覆蓋什麼,沒有人能提供一個好的答案。發佈迄今爲止已經嘗試過的代碼可能是一個好主意,不管它給你帶來多麼困惑。 – TheBlastOne

+0

我編輯了提供要生成的示例輸出腳本代碼的問題。 –

回答

0

這可能是矯枉過正,你需要做什麼,但在模型驅動的項目,我已經實現了幾個基於使用Eclipse M2T(http://www.eclipse.org/modeling/m2t/)EMF模型廣泛的代碼生成器,雖然它被稱爲了openArchitectureWare回然後。

你輸入需要可作爲模型,雖然,你需要熟悉與使用中M2T像XPAND

生成代碼的語言