나는 간단한 수학 표현 파서를 가지고 있으며 자신이 AST를 작성하려고한다. (ast 파서를 의미하지 않는다.) 그러나 모든 노드는 두 개의 피연산자를 가질 수 있습니다. 여기에 단지 "추가"부분을 인도 표준시간단한 수학 표현 파서
+
/\
2 +
/\
3 4
문제는 내가 재귀를하고 내 문법을 얻을 수 아니라고이다 : 그래서 2 + 3 + 4는이 같은 트리가 발생합니다
add returns [Expression e]
: op1=multiply { $e = $op1.e; Print.ln($op1.text); }
('+' op2=multiply { $e = new AddOperator($op1.e, $op2.e); Print.ln($op1.e.getClass(), $op1.text, "+", $op2.e.getClass(), $op2.text); }
| '-' op2=multiply { $e = null; } // new MinusOperator
)*
;
그러나 결국이 같은 단일 트리 생성합니다 : A는 "추가"occour 수 있기 때문에
+
/\
2 4
나는 문제가 어디 있는지 알고는, 그것이 결코 또는 무한히 (*)하지만 이 문제를 해결하는 방법을 모르겠습니다.
"추가"부분 : 나는 같은 생각
add returns [Expression e]
: op1=multiply { $e = $op1.e; Print.ln($op1.text); }
('+' op2=(multiply|add) { $e = new AddOperator($op1.e, $op2.e); Print.ln($op1.e.getClass(), $op1.text, "+", $op2.e.getClass(), $op2.text); }
| '-' op2=multiply { $e = null; } // new MinusOperator
)?
;
그러나 이것은 나에게 recoursion 오류를 줄 것이다. 어떤 아이디어? 이와
$e = new AddOperator($op1.e, $op2.e);
:
$e = new AddOperator($e, $op2.e); //$e instead of $op1.e
이를
네, 감사합니다.이 작품은 완벽합니다! – KIC
@KIC 내가 도와 줘서 다행이다 :) – user1201210