我想从另一个先前定义的列表中支持类似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 ...如果变量先前已初始化。
有人可以建议一种方法吗?
答案 0 :(得分:0)
找到了部分答案。这在ANTLR中称为前向引用。 http://www.antlr.org/wiki/display/CS652/Forward+references+solution 但我的问题是表达式是唯一可以返回结果的东西,因此我不能只将表达式存储在列表中,然后检查合成结构。我需要并行进行评估