您好,我正在嘗試實現一個翻譯器。 既然它變得越來越複雜,我會試着更好地解釋我想要實現的。ANTLR + StringTemplate - 創建JavaLike語言並將其轉換爲PLSql,C和C++
我需要指定一個新的java like語言。 該語言必須實現java方法的所有結構:變量聲明,表達式,條件表達式,括號表達式等...... 該語言將與向量,常量和布爾值一起使用。 它有不同的功能:log,avg,sqrt與sum,diff,shift等一樣。 該語言必須翻譯成plsql和其他語言。所以定義的方法將成爲一個StoredProcedure或C++函數或其他。 我還需要考慮運算符優先級等數學約束條件(+, - ,*,/,< <,...等等)。
我已經得到這樣的提示:Decompose expression in base operation: ANTLR + StringTemplate
我需要知道實現我的任務最好的解決方案。我想我必須以流水線方式使用所有解決方案,但我不想使用試驗和錯誤方法來解決問題。
我嘗試了不同的(分離的)解決方案,但整合在一起對我來說很難。
我最後的問題是分離矢量和常量之間的表達式和矢量和矢量之間的表達式。實際上使用plsql我有不同的功能來處理這些情況。即表達式vactor1 + 5(或5 + vector1)必須像PKG_FUN.constant_sum(cursor1,5)一樣被翻譯,而不是vector1 + vector2必須翻譯爲PKG_FUN.vector_sum(vector1,vector2)。此外,我可以有產生向量的函數或表達式,以及產生常量的其他函數或表達式,這在分析表達式(即向量a =向量1 +((5 + var2)* ln(向量2)* 2)^ 2)時必須考慮。
這種語言的一個例子可以是:
DEFINE my_new_method(date date_from, date date_to, long variable1, long variable2){
vector result;
vector out1;
vector out2;
int max = -5+(4);
out1 = GET(date_from, date_to, variable1, 20);
out2 = GET(date_from, date_to, variable2);
if(avg(out1) > max)
{
result = sqrt(ln(out2) + max)*4;
}else
{
result = out1 + ln(out1) + avg(out2);
}
for(int i=0; i<result.length ; i++)
{
int num = result.get(i);
result.set(num*5, i);
}
return result;
}
我應該在PLSQL,C或C++或其他語言它翻譯。
任何幫助,將不勝感激。
對於像這樣的論壇來說,這是個大問題。請閱讀[常見問題](http://stackoverflow.com/faq)關於您[可](http://stackoverflow.com/faq#questions)和[不應該]的問題(http:// stackoverflow.com/faq#dontask)問。 –
你好,我只需要知道如何擴展答案:http://stackoverflow.com/questions/13817046/decompose-expression-in-base-operation-antlr-stringtemplate/14198140#comment19695920_14198140處理矢量常量表達和矢量 - 矢量表達式以便以不同的方式對它們進行轉換。此外,我想知道,如果ANTLR + StringTemplate是實現我想要做的最好的方法。 –