ANTLR语义评估

时间:2013-07-16 14:17:03

标签: antlr

我想从另一个先前定义的列表中支持类似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 ...如果变量先前已初始化。

有人可以建议一种方法吗?

1 个答案:

答案 0 :(得分:0)

找到了部分答案。这在ANTLR中称为前向引用。 http://www.antlr.org/wiki/display/CS652/Forward+references+solution 但我的问题是表达式是唯一可以返回结果的东西,因此我不能只将表达式存储在列表中,然后检查合成结构。我需要并行进行评估