저는 명령 행 계산기를하고 있습니다. 그래서 표현식을 파싱해야합니다.파서 트리 또는 표현식 트리
calc 2*(3+4)*5
이미 스캐너 단계가 완료되어 토큰의 배열을 반환했습니다. 이제 구문 분석기 단계에 있습니다. 그러나 파서/표현 트리를 수행하는 방법에 대한 단서가 없습니다. 이 모든입니다
지금까지이 : 내 나무는 단지 왼쪽으로 인상 볼 수 있듯이
while (*tokens != 0) {
NODE* n = create_node(*tokens++);
insert_node(&root, &n);
}
:
NODE* create_node(TOKEN* t) {
NODE* n = (NODE*)malloc(sizeof(NODE));
n->t = t;
n->l = n->r = 0;
return n;
}
void insert_node(NODE** top, NODE** n) {
if (!*top) {
*top = *n;
return;
}
if (!(*top)->l) insert_node(&(*top)->l, n);
else
if (!(*top)->r) insert_node(&(*top)->r, n);
else
insert_node(&(*top)->l, n);
}
그런 다음 내가 좋아하는 토큰 배열을 전달합니다. 나는 최상위에있는 연산자에 의해 순서를 매기는 방법과 연산자 우선 순위를 포함하여 숫자를 잎으로 만드는 방법에 대한 단서가 없다.
계몽주의와 프로그래밍 (코드) 용어로도 감사하겠습니다.
+1. 또한, 프로그래밍 및 데이터 구조에 대한 교과서에서이 문제에 대해 말하고있는 것을보십시오. 실제로 거기에 있어야합니다. – catchmeifyoutry