1

以前に定義された別のリストから Haskell のようなリスト構築をサポートしたい例: [ 2*x+1 | 2*x+1 | x<-list1]; 同時に評価を行い、新しいリストを出力します。

私は次のことを試しました:

constructlist
    :   {   ArrayList<Integer> myList= new ArrayList<Integer>();    
            ArrayList<Integer> newList = new ArrayList<Integer>();}

        '[' op1= expression '|' op2= expression '<' '-' IDENT ']'

          { myList= lists.get($IDENT.text);                                         
            for(int i=0;i<myList.size();i++)
            {
                variables.put($IDENT.text,myList.get(i));
                newList.add($op1.result);
            }

            {System.out.println(newList);}                                  


    ;

しかし、これは絶対にうまくいきません。任意の式の結果を返す式があります (例: x*y + 2... 変数が以前に初期化されている場合)。

誰でもこれを行う方法を提案できますか?

4

1 に答える 1

0

部分的な回答が見つかりました。これは、ANTLR では前方参照と呼ばれます。 http://www.antlr.org/wiki/display/CS652/Forward+references+solution しかし、私の問題は、結果を返すことができるのは式だけであるため、式をリストに保存してから構文構造をチェックします。評価を並行して行う必要がある

于 2013-07-17T05:19:52.993 に答える