こんにちは私は翻訳者を実装しようとしています。ますます複雑になるので、実装したいことをよりよく説明しようとします。
新しい Java ライクな言語を指定する必要があります。この言語は、Java メソッドのすべての構造を実装する必要があります: 変数宣言、式、条件式、括弧式など... この言語は、ベクトル、定数、およびブール値で動作します。log、avg、sqrt、sum、diff、shift など、さまざまな機能があります。この言語は、plsql およびその他の言語に翻訳する必要があります。したがって、定義されたメソッドは StoredProcedure または C++ 関数などになります。演算子の優先度 (+、-、、/、<<、>> など) などの数学的な制約も考慮する必要があります。
私はすでにこのヒントを取得しています: 基本操作で式を分解: 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++、またはその他の言語に翻訳する必要があります。
どんな助けでも大歓迎です。