답변:
일반적으로 이해되는 바와 같이 abstact 구문과 유형에 대한 정렬 간에는 실제로 많은 유사성이 있습니다. 그러나 정렬은 형식적인 구문 개념 이고, AS 트리도 구문이며, 유형은 의미 개념 입니다.
용어는 대수학 ( 자유 대수학 이라고도 함 )과 보편적 인 대수학 에서 나옵니다 . 이것들은 본질적으로 모든 해석과 독립적으로 분석되는 대수 구조의 구문 이론입니다. 그것들은 20 세기 전반에 개발되었습니다.
용어는 트리로 표시 될 수 있으며, 여기서 노드는 유한 연산자 세트에서 레이블이 지정되며 각 연산자는 트리의 딸 수를 지정하는 고정 된 arity를 갖습니다. Arity 0은 나뭇잎입니다. 다중 정렬 대수 에서는 각 연산자가 정렬에 속하고 정렬이 정렬 된 정렬 목록으로 대체되어 각 딸이 헤드 연산자의 종류를 수정하도록 정렬됩니다. 연산자의 종류와 딸의 종류 목록을 연산자 의 서명 이라고합니다 .
보편적 인 대수학에서, 이것은 용어 사이에 등가 관계식을 정의함으로써 더욱 세분화됩니다.
비록 약간 희미 해졌지만, 이러한 개념은 상당히 대중적이며 20 세기 후반에 컴퓨터 과학에서 많이 연구되었으며, 추상 대수학으로서 추상 데이터 유형의 기초로 보았습니다. 객체 지향 프로그래밍의 클래스는 없습니다.
보편적 대수학은 범주 이론의 개발과 관련이 있으며, 이는 유형 및 프로그래밍 언어의 현재 비전에서 기초가됩니다.
대수는 구문 적 대상이며 유형에 해당하는 일부 의미 론적 도메인에서 해석과 함께 사용되도록 고안되었습니다. 해석은 정렬을 값 (유형)의 도메인으로 분류 하고 연산자를 해당 도메인 사이의 함수 로 매핑하여 시그니처가 존중되도록하고 방정식 대수의 경우에도 방정식을 존중합니다. 그룹 정의 결과를 존중하는 연산을 사용하여 그룹 이론 결과를 모든 도메인에 적용 할 수 있습니다.
이 조직은 초기 프로그래밍 언어, 특히 프로그래밍 언어 공식화에 관심이있는 초기 연구자들에 의해 매우 편리한 것으로 간주되었습니다. 구문과 의미를 분리하고 수학적으로 잘 이해한다는 이점이있었습니다.
이를 채택한 또 다른 이유는 개발 환경이나 공식 시스템에서 프로그램의 속성을 입증하기 위해 프로그램을 조작하는 도구 개발에 대한 관심 (더 많은 쌍둥이 문제로 밝혀 짐)이었습니다.
이로 인해 프로그래밍 언어에 대한 추상 구문 트리 (AST) 개념이 등장하게 되는데, 이는 본질적으로 다중 분류 대수 (일부 시스템에서 정렬 조합을 사용하여 정제 됨)의 용어입니다. AST는 언어에 대한 참조 구문으로, 의미 론적 의미론에서와 같이 동질성에 의해 의미론을 정의 할 수 있습니다.
이것은 언어의 의미론을 연구하는 데 편리 할뿐만 아니라 문자열보다 문자열 구조가 우수하므로 프로그래밍 도구 및 프로그래밍 환경을 개발하기위한 더 나은 기반이됩니다.
파싱 기술의 한계로 인해 왜곡 된 문법을 사용했기 때문에 전통적으로 지저분한 파싱을 분리 할 수 있습니다. 또한 프리젠 테이션 문제를 고려합니다.
프로그램의 여러 구체적 (문자열 또는 그래픽) 표현을 허용하며 때로는 편리 할 수 있습니다 (프로그램 구문에서 탭이나 대화 대신에 구두점을 사용하는 것이 사람들에게 강제되어야하는 이유는 없습니다).
추상적 해석을 통해 프로그램 특성을 분석하기 위해 프로그램 및 다양한 종류의 해석을 쉽게 정의 할 수 있습니다.
자동 프로그램 변환 또는 언어 간 번역과 같은 (반) 자동화 된 프로그램 조작 도구를 작성하는 데 편리합니다.
일부 추상 구문 형식을 사용하면 일부 연산자가 여러 종류에 속하는 트리 (표현)를 비공식적으로 볼 수 있기 때문에 상황이 때때로 좀 더 복잡 할 수 있습니다. 예를 들어 변수 (할당 가능한 엔터티)를 나타내는 구문 구성과 표현식에 대한 정렬이있을 수 있습니다. 그러나 모든 변수는 표현식으로 사용할 수 있으며 그 반대는 거짓입니다.
프로그래밍 언어에 대한 초기 논문은 1970 년대 중반으로 거슬러 올라갑니다. 당시의 개념화는 구문 인식 ( "지시 된"이라는 단어가 사용 된) 프로그래밍 환경의 제작을위한 것이 었습니다. 유럽에서는 멘토와 켄타 우어, 미국에서는 코넬 프로그램 신시사이저를 찾으십시오. 실제로 이러한 개념을 실제로 사용하는 최초의 두 시스템이었습니다. 그 후 많은 사람들이 개발되었습니다.
그러나 추상 구문은 이러한 시스템보다 우선합니다. Lisp 언어 (1958)에는 추상 구문이 있었는데, 이는 논리 학자에 의해 개발되었으며 프로그램을 조작하는 프로그램을 만들기 위해 놀라운 일이 아닙니다 (나중에 나오는 ML 및 LCF 참조). 그러나 Lisp는 분류되지 않았습니다. 모든 것이 구문 적으로 목록이었고 더 세련된 구조는 본질적으로 의미론에 의존했습니다. 이로 인해 일부 사람들은 Lisp에 구문이 없다고 다소 잘못 생각합니다.
4 장에서 정렬은 구문을위한 것이고 타입은 시맨틱을위한 것으로 보인다.
40 페이지의 예제 구문 도표는 언어 L {num str}의 정렬을 다룹니다. 분명히 분류는 언어의 구문에서 범주입니다.
특히, "plus"는 결과의 구문 범주 인 정렬을 갖습니다. 연산자 "plus"의 종류는 "Exp"입니다. 그것은 구문 적으로 연산자 "plus"의 호출이 표현식이라는 사실을 나타냅니다. 연산자 "plus"를 호출하면 표현식이 허용되는 추상 구문 트리에서 위치를 채울 수 있습니다. 그것이 "플러스"의 건설 종류입니다. 이것이 프로그램을 나타내는 텍스트의 구조에 맞는 방법입니다.
41 페이지의 유형 시스템은 언어 L {num str}의 유형을 처리합니다. 피연산자의 유형이 "num"인 경우 연산자 "plus"의 유형은 "num"입니다. 이 판단은 연산자 "plus"의 의미에 대한 부분 설명입니다. 즉, 연산자 "plus"의 의미 중 일부는 숫자를 생성하기 위해 두 숫자를 결합하는 것입니다. 이 의미는 "플러스"를 다른 표현과 구별합니다.
또한, "num"과 "str"의 두 가지 유형을 포함하는 "Typ"이라는 정렬이 있습니다.
1 장의 시작 부분에서 Harper는 sort 라는 단어의 의미에 대한 힌트를 제공합니다 .
언어의 구문은 다양한 종류의 문구 (표현, 명령, 선언 등)를 결합하여 프로그램을 구성 할 수 있는 수단을 지정합니다 .
그는 단어 구문 을 추상 구문 트리로 정의한 다음 논의합니다.