구체적인 구문 트리은 문법 규칙에서 구문이 말하는 것과 일치합니다. 추상 구문 트리의 목적은 "구문 트리"에서 필수적인 것을 "단순하게"표현한 것입니다.
AST IMHO의 실제 가치는 중부 표준시보다 작은이며 처리하는 데 소요되는 시간이 짧습니다. (당신은 말할 수 있습니다, 누가 신경 쓰겠습니까? 그러나 우리는 수천만 노드가 한 번에 살고있는 도구로 작업합니다!).
구문 구조 트리 작성을 지원하는 대부분의 구문 분석기 생성기는 트리 노드가 CST보다 "더 간단"하다는 가정하에 직접 작성하는 방법을 사용자가 직접 지정하도록 요구합니다 (일반적으로, 프로그래머는 꽤 게으 르기 때문에). 논리적으로는 트리 방문자 기능을 더 적게 코딩해야한다는 것을 의미합니다. 엔지니어링 에너지를 최소화한다는 점에서 가치가 있습니다. 3500 개의 규칙 (예 : COBOL)이 있으면이 규칙이 중요합니다. 그리고이 "더 단순한"성질은 "작은 것"의 좋은 성질로 인도합니다.
그러나 이러한 AST를 사용하면 문법과 일치하지 않는 문제가 발생합니다. 이제는 문법을 매칭하지 않아도됩니다. 그리고 3500 개의 규칙 문법에 1,500 개의 AST 노드가있을 때 이것은 중요합니다. 그리고 문법이 진화하면 (그들은 항상 그렇습니다!), 이제는 두 가지 거대한 것들을 동기화 할 수 있습니다.
또 다른 해결책은 파서가 단순히 CST 노드를 만들고이를 사용하는 것입니다. 이것은 문법을 구축 할 때 큰 이점입니다. 3500 개의 문법 규칙을 모델링하기 위해 1500 개의 특수 AST 노드를 만들 필요가 없습니다. 트리가 문법과 동형이라고 생각하십시오. 문법 엔지니어의 관점에서 볼 때 이것은 완전히 무절제하기 때문에 문법을 올바르게하고 해킹하는 데 집중할 수 있습니다. 아마도 노드 방문자 규칙을 더 작성해야하지만이를 관리 할 수 있습니다. 나중에 이것에 대한 자세한 내용.
DMS Software Reengineering Toolkit과 함께하는 작업은 (GLR) 구문 분석 프로세스의 결과에 따라 자동으로 CST를 작성하는 것입니다. DMS는 자동있는 문법 규칙 쌍 목록 단자 (키워드 punctation) 의미 쓸모 단항 제작물 반송 아닌 값을 제거하고 형성함으로써, 공간 효율성의 이유에 대해 "압축"CST를 구성 목록 같은
L = e ;
L = L e ;
L2 = e2 ;
L2 = L2 ',' e2 ;
및 이러한 형태의 다양한 변형이있다. 문법 규칙과 가상 CST의 관점에서 생각해보십시오. 도구는 압축 된 표현에서 작동합니다. 당신의 두뇌에서 쉽고, 더 빠르거나 작습니다.
이 방법으로 만들어진 압축 된 CST는 수동으로 설계 한 AST가 많이 보입니다 (끝 부분의 링크 참조). 특히 압축 된 CST는 구체적인 구문 인 노드를 포함하지 않습니다. 부작용이 있습니다. 예를 들어 '('및 ')에 대한 콘크리트 노드가 표현식 하위 문법에서 고전적으로 발견되는 반면에 "괄호 노드"은이 압축 CST로 나타나야합니다. 처리. 진정한 대서양 표준시는 이것을 가지지 못할 것입니다. 이것은 대서양 표준시 건설을 지정하지 않아도되는 편리함에 대해 지불하는 아주 작은 가격과 같습니다. 트리에 대한 문서는 항상 사용 가능하고 정확합니다. 문법 은입니다.
"추가 방문자"는 어떻게 피합니까? 우리는 전체적으로는 아니지만 DMS는 AST를 처리하고 CST와 AST 간의 차이점을 투명하게 처리하는 AST 라이브러리를 제공합니다. 또한 DMS는 트리를 위아래로 계산 한 값을 전달하는 방법 인 "속성 문법"평가 기 (AGE)를 제공합니다. AGE는 모든 트리 표현 문제를 처리하므로 툴 엔지니어는 문법 규칙 자체에 직접 효과적으로 계산을 쓰는 것에 대해서만 우려하고 있습니다. 마지막으로, DMS는 문법의 코드 조각을 사용하여 관련된 노드 유형의 대부분을 모른 채 특정 유형의 하위 트리를 찾는 데 사용할 수있는 "표면 구문"패턴도 제공합니다.
다른 답변 중 하나는 원본을 재생성 할 수있는 도구를 작성하려는 경우 AST가 CST와 일치해야한다는 것입니다. 그다지 좋지는 않지만 CST 노드가있는 경우 소스를 다시 생성하는 것이 훨씬 쉽습니다. DMS generates most of the prettyprinter automatically 두 가지 모두에 액세스 할 수 있기 때문에 : -
결론 : 대서양 횡단은 기저귀 및 개념 모두에 적합합니다. CST에서 자동화 된 AST 구성은 두 가지를 제공하며 두 개의 다른 세트를 추적하는 문제를 피할 수 있습니다.
편집 년 3 월 2015 Link to examples of CST vs. "AST" built this way
그래서 코드에 실제 AST를 만들 수 있습니까? – Joey