1

DSL 言語を C# に変換するインタープリターを作成しています。C# はコンパイルされ、スタンドアロンの実行可能ファイルとして出荷されます。変数の定義といくつかの基本的な算術式の計算をうまく処理できました。

これまでのところ、 AST ツリーを生成せずにANTLR を使用してこれらすべてを行いました。以下に示すように、アクションコードを文法に埋め込むだけですべてを行うことができました。

statement
    : var_declaration
    | if_statement
    ;
// k = var or k = var.something.somethingelse
var_declaration
    : 
    varType=ID varName=ID ASSIGN r=rvalue
    {
        if(variablesTable.ContainsKey(varName.Text)){
            // Variable ID not defined yet, cannot continue;
            ReportError("A local variable '"+varName.Text+"' is already defined");
            return;
        }
        if(r == null){ ReportError ("No r-value specified"); return;}
    }
    ;

if_statement
    : 'if' expression s1=statement ('else' s2=statement)?

statement
    :...
expression
    :...

私は現在、if および loop ステートメントのコードを処理して適切に生成する方法に苦労しています。

質問

  1. 条件ステートメントとループ ステートメントを処理するために AST ツリーを構築する必要がありますか?
  2. ASTツリーの有無にかかわらずこれを行う方法についての明確なチュートリアルを見つけることなく、これを何度もグーグルで検索しましたが、これに関する良いチュートリアルを知っていますか?

前もって感謝します、

4

1 に答える 1

0

文法に埋め込まれたアクションコードを介してステートメントが可能かどうかを確認するように見えますが、文法が大きくなるとスケーリングされないため、これを処理する方法はお勧めしません。

于 2012-11-18T19:10:05.757 に答える