1

我想从另一个先前定义的列表 ex 中支持类似 Haskell 的列表构造: [ 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 回答