2012-03-26 6 views
0

나는 파스 트리에서 순서대로 순회했으며 심볼 테이블도 생성되었습니다. 하지만이 용도로 AST를 작성하려면 어떻게해야합니까? 다음 다른 아이들의 목록을 한 후, 귀하의 구문 분석 트리에서건물 추상 구문 트리

  • 당신이 중위 즉 이 왼쪽 아이를 가지고 갈 부모를, 그리고 다음은

    내가 (일부 신뢰할 수없는 자원) 수집 한 것입니다.
  • SEMICOL, 괄호 같은 것을 발견하면 AST에 추가하지 마십시오. 노드에 자식이 하나만있는 경우 해당 노드를 제거하고 대신 자식을 사용하십시오.

이 작업을 수행하면됩니까? > (ageArray) - -

+0

이 시점에서 범위를 알 수 없으므로 기호 테이블이 생성된다는 것이 인상적입니다. – Hogan

+0

@Hogan 구문 분석 트리가 있습니다. 범위를 알지 못하게하려면 어떻게해야합니까? – Kraken

+1

시스템에는 현재 의미 정보가 없어야합니다. 방금 파싱했습니다. – Hogan

답변

0

업데이트는 파스 트리이

(INT)와 같은 문장 노드를 포함 할 수 있습니다 귀하의 예에서 코멘트

을 기반으로> ([) -> (30) -> (]) ->()

교수가 기대하는

(intArray 같은) -> (ageArray) -> (I 추측 30)

.


당신은 해결책을 간단하게하고 있습니다. 단순히 나무를 횡단하고 물건을 던지는 문제가 아닙니다. AST는 프로그램 언어의 구조를 나타냅니다. AST를 만들기 위해서는 먼저 AST가 어떻게 보이는지 디자인해야합니다.

예를 들어, "IF"노드는 부울 수식 요소 (이것은 아마도 그 자체도 나무입니다), 참 진술 트리 및 거짓 진술 트리를 갖는 것으로 설계 될 수 있습니다.

컴파일하는 언어에 따라 모든 요소가 어떻게 보이는지 디자인해야합니다. 그런 디자인을하면 구문 분석 트리에서 AST를 생성하기 위해 렉서가 자주 사용됩니다.

+0

예 내 선언은 다음과 같습니다. Declarstmt -> DECLARE listid : type; 부모 노드는 Declarestmt 입니다. 하위 목록에는 DECLARE - listid - : -type :;이 있습니다. – Kraken

+0

아, 당신은 컴파일러 생성기를 사용하고 있다고 말하지 않았다. 이 경우, 주문한대로, 필요없는 요소를 버리십시오. – Hogan

+0

당신은 컴파일러 생성기를 사용하고 있다고 말하면서, 내가 한 일이 여기 있습니다. DFA를 사용하는 Lexial Analysis 토큰 스트림을 구문 분석기 (이제 파서 모듈에 전달)에서 문법 규칙을 살펴보고 거기에서 FIRST FOLLOW SETS 및 LL 예측 구문 분석 기술을 사용하여 파서를 작성했습니다. (스택도 사용). 컴파일러 생성기라고 부르는가? – Kraken

관련 문제