2013-07-16 5 views
1

이전에 정의 된 다른 목록에서 하스켈 식 목록 구성을 지원하고자합니다. 예 : [2 * x + 1 | x < -list1]; 동시에 평가를 수행하고 새 목록을 인쇄하십시오.ANTLR 의미 론적 평가

나는 다음과 같은 시도 :

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

이 부분 해답을 발견하십시오 일을하는 방법을 제안 할 수 있습니다이를.?. ANTLR에서 앞으로 참조라고합니다. http://www.antlr.org/wiki/display/CS652/Forward+references+solution 하지만 내 문제는식이 결과를 반환 할 수있는 유일한 것이므로 목록에 식을 저장 한 다음 구문 구조를 확인할 수 없다는 것입니다. 평행 한 평가