2011-04-24 3 views
10

컴파일러는 소스 코드를 파싱하고 추상 구문 트리를 작성합니다. 추상 구문 트리를 구성하는 데 사용되는 함수는이라는 의 합성 속성을 구성하는 포인터를 반환합니다. 그것들은 무엇이며 어떻게 달라지는가 계승 속성.?추상 구문 트리를 만드는 컨텍스트에서 합성 된 속성이란 무엇입니까?

편집 : 도움이 될지 모르겠지만 원래 프랑스어 문맥에서이 용어에 대해 들어 보았습니다. Attributs synthétisés, attributs hérités.

답변

19

속성은 중요한 관심사와 관련된 추가 값입니다. AST의 경우, 각 AST 노드와 연관된 쌍 (attribute_name, attribute_value)으로 생각할 수 있습니다. 속성 이름은 흥미있는 사실 유형에 해당하며 속성 값은 해당 사실의 실제 상태와 일치합니다 (예 : , "(constants_in_subtree_count, 12)").

속됨합성이 속성 값은 일반적으로 아이를 사용하여 AST 노드를 생성하는 문법 규칙과 연관된 각 AST 노드에 대하여 계산하는 방법을 설명하기위한 용어이다.

합성 된 속성은 값이 자식 노드에서 속성 값에서 계산하는, 그리고 트리까지 을 통과하고있다. 종종 합성 된 속성 값이 결합되어 상위 노드에 대한 속성을 생성합니다. AST 노드에 자체 속성 (constants_in_subtree_count, 5)과 (constants_in_subtree_count, 7)이있는 두 개의 하위 항목이있는 경우 해당 속성을 전달하여 해당 속성 (constants_in_subtree_count, 12)을 계산할 수 있습니다.

상속 속성은 부모에서 자식으로 전달되는 속성입니다. 함수 AST의 루트가 함수 반환 유형이 속성으로 (return_type, integer)인지 "알"면 리턴 유형을 함수 루트의 하위에 전달할 수 있습니다. 함수 본문에. 그 나무의 깊은 곳은 실제 반환 진술서입니다. 상속 된 속성 (return_type, X)을 받으면 결과는 컴퓨팅 결과가 올바른 유형인지 확인할 수 있습니다.

실제로는 노드에 임의의 속성 집합을 정의하고 AST 처리에 필요한 여러 목적으로 트리의 위아래로 전달할 수 있어야합니다 (심볼 테이블 작성, 제어 흐름 그래프 작성, 유형 검사 수행). , 컴퓨팅 메트릭, ...). attribute grammar 생성기는 문법 규칙, 속성 정의 세트 및 각 규칙과 관련된 노드의 합성 및 상속 된 속성을 계산하는 방법에 대한 규칙을 취하는 파서 생성기의 일종이며 파서와 모두를 계산하는 AST 워커를 생성합니다 속성

이 아이디어의 가치는 AST에 관한 많은 흥미로운 것들을 규칙적으로 계산하는 데 사용할 수있는 자동화가 지원하는 조직 원리를 제공한다는 것입니다. 그렇지 않으면 임시 코드를 사용하여 모든 것을 코딩 할 수 있습니다. 우리 DMS Software Reengineering Toolkit

는 AST 조작 시스템 (실제로는 소스 - 소스 프로그램을 변환) 몹시 유용하는 AST 통해 분석 온갖 계산할 평행 특성 평가를 사용 등 (통상 측정 심볼 테이블 타입 확인 (위에서 설명한 리턴 유형 검사), 코드에서의 제어 및 데이터 흐름 추출은 물론 서브 트리에 대해 계산되지 않은 기타 유용한 결과 ("이 표현에서 부수적 인 배정 목록")을 포함합니다. 왜 평행합니까?음, 하위 트리의 속성 계산은 본질적으로 독립적이므로 병렬 처리가 이미 있으며, 실제로 큰 나무를 처리 할 때 성능 문제가 발생합니다. DMS는 종종 수천 개의 편집 단위를 처리하며 각각은 (아마도 큰) AST를 생성합니다.

+2

예제를 이용해 주셔서 감사합니다. 이것이 나를 이해하는 데 도움이되는 중요한 것입니다. 뭔가 내 교수 슬라이드와 위키 피 디아가 빠져 나갔다. – d1str0