프로그래밍 언어 시맨틱에는 어떤 것이 있습니까?


9

저자는 프로그래밍 언어에 대한 실용 기초의 1 장 에서 추상 구문 트리가 정렬 과 연관되어 있다고 언급했다 .

직관적으로 정렬은 유형과 비슷하지만 정확한 정의가 있는지 알고 싶습니다. 참고 자료도 있으면 기쁠 것입니다.

답변:


4

유형과 정렬에 어떤 의미를 취할 것인지에 달려 있습니다. -그러나 간단한 비공식적 정의는 다음 과 같습니다. 정렬은 AST 클래스이고 유형은 값 클래스입니다 .


4

일반적으로 이해되는 바와 같이 abstact 구문과 유형에 대한 정렬 간에는 실제로 많은 유사성이 있습니다. 그러나 정렬은 형식적인 구문 개념 이고, AS 트리도 구문이며, 유형은 의미 개념 입니다.

용어는 대수학 ( 자유 대수학 이라고도 함 )과 보편적 인 대수학 에서 나옵니다 . 이것들은 본질적으로 모든 해석과 독립적으로 분석되는 대수 구조의 구문 이론입니다. 그것들은 20 세기 전반에 개발되었습니다.

용어는 트리로 표시 될 수 있으며, 여기서 노드는 유한 연산자 세트에서 레이블이 지정되며 각 연산자는 트리의 딸 수를 지정하는 고정 된 arity를 ​​갖습니다. Arity 0은 나뭇잎입니다. 다중 정렬 대수 에서는 각 연산자가 정렬에 속하고 정렬이 정렬 된 정렬 목록으로 대체되어 각 딸이 헤드 연산자의 종류를 수정하도록 정렬됩니다. 연산자의 종류와 딸의 종류 목록을 연산자 의 서명 이라고합니다 .

보편적 인 대수학에서, 이것은 용어 사이에 등가 관계식을 정의함으로써 더욱 세분화됩니다.

비록 약간 희미 해졌지만, 이러한 개념은 상당히 대중적이며 20 세기 후반에 컴퓨터 과학에서 많이 연구되었으며, 추상 대수학으로서 추상 데이터 유형의 기초로 보았습니다. 객체 지향 프로그래밍의 클래스는 없습니다.

보편적 대수학은 범주 이론의 개발과 관련이 있으며, 이는 유형 및 프로그래밍 언어의 현재 비전에서 기초가됩니다.

대수는 구문 적 대상이며 유형에 해당하는 일부 의미 론적 도메인에서 해석과 함께 사용되도록 고안되었습니다. 해석은 정렬을 값 (유형)의 도메인으로 분류 하고 연산자를 해당 도메인 사이의 함수 로 매핑하여 시그니처가 존중되도록하고 방정식 대수의 경우에도 방정식을 존중합니다. 그룹 정의 결과를 존중하는 연산을 사용하여 그룹 이론 결과를 모든 도메인에 적용 할 수 있습니다.

이 조직은 초기 프로그래밍 언어, 특히 프로그래밍 언어 공식화에 관심이있는 초기 연구자들에 의해 매우 편리한 것으로 간주되었습니다. 구문과 의미를 분리하고 수학적으로 잘 이해한다는 이점이있었습니다.

이를 채택한 또 다른 이유는 개발 환경이나 공식 시스템에서 프로그램의 속성을 입증하기 위해 프로그램을 조작하는 도구 개발에 대한 관심 (더 많은 쌍둥이 문제로 밝혀 짐)이었습니다.

이로 인해 프로그래밍 언어에 대한 추상 구문 트리 (AST) 개념이 등장하게 되는데, 이는 본질적으로 다중 분류 대수 (일부 시스템에서 정렬 조합을 사용하여 정제 됨)의 용어입니다. AST는 언어에 대한 참조 구문으로, 의미 론적 의미론에서와 같이 동질성에 의해 의미론을 정의 할 수 있습니다.

이것은 언어의 의미론을 연구하는 데 편리 할뿐만 아니라 문자열보다 문자열 구조가 우수하므로 프로그래밍 도구 및 프로그래밍 환경을 개발하기위한 더 나은 기반이됩니다.

파싱 ​​기술의 한계로 인해 왜곡 된 문법을 사용했기 때문에 전통적으로 지저분한 파싱을 분리 할 수 ​​있습니다. 또한 프리젠 테이션 문제를 고려합니다.

프로그램의 여러 구체적 (문자열 또는 그래픽) 표현을 허용하며 때로는 편리 할 수 ​​있습니다 (프로그램 구문에서 탭이나 대화 대신에 구두점을 사용하는 것이 사람들에게 강제되어야하는 이유는 없습니다).

추상적 해석을 통해 프로그램 특성을 분석하기 위해 프로그램 및 다양한 종류의 해석을 쉽게 정의 할 있습니다.

자동 프로그램 변환 또는 언어 간 번역과 같은 (반) 자동화 된 프로그램 조작 도구를 작성하는 데 편리합니다.

일부 추상 구문 형식을 사용하면 일부 연산자가 여러 종류에 속하는 트리 (표현)를 비공식적으로 볼 수 있기 때문에 상황이 때때로 좀 더 복잡 할 수 있습니다. 예를 들어 변수 (할당 가능한 엔터티)를 나타내는 구문 구성과 표현식에 대한 정렬이있을 수 있습니다. 그러나 모든 변수는 표현식으로 사용할 수 있으며 그 반대는 거짓입니다.

프로그래밍 언어에 대한 초기 논문은 1970 년대 중반으로 거슬러 올라갑니다. 당시의 개념화는 구문 인식 ( "지시 된"이라는 단어가 사용 된) 프로그래밍 환경의 제작을위한 것이 었습니다. 유럽에서는 멘토와 켄타 우어, 미국에서는 코넬 프로그램 신시사이저를 찾으십시오. 실제로 이러한 개념을 실제로 사용하는 최초의 두 시스템이었습니다. 그 후 많은 사람들이 개발되었습니다.

그러나 추상 구문은 이러한 시스템보다 우선합니다. Lisp 언어 (1958)에는 추상 구문이 있었는데, 이는 논리 학자에 의해 개발되었으며 프로그램을 조작하는 프로그램을 만들기 위해 놀라운 일이 아닙니다 (나중에 나오는 ML 및 LCF 참조). 그러나 Lisp는 분류되지 않았습니다. 모든 것이 구문 적으로 목록이었고 더 세련된 구조는 본질적으로 의미론에 의존했습니다. 이로 인해 일부 사람들은 Lisp에 구문이 없다고 다소 잘못 생각합니다.


구문 영역과 의미 영역에 서로 다른 두 가지 계층 구조가 있다고 말할 수 있습니까? 구문에서는 AST, 정렬 및 정렬 클래스를 제공합니다. 시맨틱에는 가치, 유형, 종류 등이 있습니다. Twelf 또는 Coq와 같은 하나의 개발 환경으로 통합하는 언어가 없습니까?
CMCDragonkai

@CMCDragonkai 내가 말한 것을 정확하게 말할 것입니다 (가능한 실수는 제외). 이 계층을 호출하지 않고 (메타) 담론의 영역이라고 부릅니다. 구문-의미론 분리는 우리가 이야기하는 것과 우리가하는 방식을 구별하며, 표현이 필요합니다. 동일한 언어의 구문과 의미를 혼합하지 말아야하지만 한 언어의 구문은 담론의 대상이 될 수 있으므로 다른 언어의 의미에 속합니다. 그런 의미에서주의를 기울여 다루어야 할 통일이있을 수 있습니다. 구문은 항상 유한하게 생성되는 반면, 시맨틱에는 그러한 제한이 없습니다.
babou

2

4 장에서 정렬은 구문을위한 것이고 타입은 시맨틱을위한 것으로 보인다.

40 페이지의 예제 구문 도표는 언어 L {num str}의 정렬을 다룹니다. 분명히 분류는 언어의 구문에서 범주입니다.

특히, "plus"는 결과의 구문 범주 인 정렬을 갖습니다. 연산자 "plus"의 종류는 "Exp"입니다. 그것은 구문 적으로 연산자 "plus"의 호출이 표현식이라는 사실을 나타냅니다. 연산자 "plus"를 호출하면 표현식이 허용되는 추상 구문 트리에서 위치를 채울 수 있습니다. 그것이 "플러스"의 건설 종류입니다. 이것이 프로그램을 나타내는 텍스트의 구조에 맞는 방법입니다.

41 페이지의 유형 시스템은 언어 L {num str}의 유형을 처리합니다. 피연산자의 유형이 "num"인 경우 연산자 "plus"의 유형은 "num"입니다. 이 판단은 연산자 "plus"의 의미에 대한 부분 설명입니다. 즉, 연산자 "plus"의 의미 중 일부는 숫자를 생성하기 위해 두 숫자를 결합하는 것입니다. 이 의미는 "플러스"를 다른 표현과 구별합니다.

또한, "num"과 "str"의 두 가지 유형을 포함하는 "Typ"이라는 정렬이 있습니다.


1
글쎄, 그는이 개념에서 그것을 사용하지만 그것을 명확하게 정의하지는 않습니다. 나는 "다양한 논리"라는 용어를 발견했다. 방금 두 가지 모두에 대한 명확한 정의를 알고 싶었습니다.
rslima

"순수 형 시스템"과 관련이 있습니다. " 형식이있는 Lambda Calculi "의 프레젠테이션을 일반적인 것으로 간주 할 수 있습니다. 그러나 간결하지 않습니다. 용어, 유형, 종류 및 정렬에 대한 명확하고 간결한 정의를 제공하는 참조를 아직 찾지 못했습니다.
minopret

파서의 생산 헤드는 어떻습니까? 많은 경우 표현식 또는 유형과 같은 유사한 이름으로 문법을 분류하게됩니다.
CMCDragonkai 2019

1

1 장의 시작 부분에서 Harper는 sort 라는 단어의 의미에 대한 힌트를 제공합니다 .

언어의 구문은 다양한 종류의 문구 (표현, 명령, 선언 등)를 결합하여 프로그램을 구성 할 수 있는 수단을 지정합니다 .

그는 단어 구문 을 추상 구문 트리로 정의한 다음 논의합니다.


마치 "종류"가 여기에서 일반적인 영어의 의미로 사용 된 것처럼 보입니다. "종류"와 동의어입니다.
Raphael

@Raphael 네, 그러나 그 의미가 후자의 공식적인 사용법과 일치하는 것 같습니다. 동의하지 않습니까?
jcora

좀 빠지는. "이런 종류의 X"라는 문구는 책에 자주 나타날 수 있습니다. 이 문장은 어떤 의미로 무언가가 정의되고 있다는 신호를 보내지 않습니다. (또한이 구절은 "정렬"이라는 용어를 이해하는 방법과 일치하지 않습니다).
Raphael

@Raphael OK,이 특정 사용법이 어떻게 일관성이 없는지 설명하십시오. 현재 알려줍니다.
jcora

내가 아는 "정렬"이라는 개념은 전체 트리가 아니라 AST의 개별 노드와 관련이 있습니다.
Raphael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.