문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자. 문서의 원본을 보거나 복사할 수 있습니다. [[분류: 프로그래밍 언어]] == 개요 == Syntax란 [[프로그래밍 언어]]에서, 기호의 집합으로 구성된 statements혹은 expression을 의미한다. 이 syntax는 프로그래밍 언어의 문법을 구성한다. syntax는 위치정보와 기호를 통해서 (주로, 컴퓨터에서는 글자로 표현된다.) 표현된다. syntax는 프로그래밍 언어의 형태를 나타내며, [[Semantics]]와는 다르게 의미정보는 가지고 있지 않는다. Semantic정보가 처리되기 전에, 컴퓨터에 의해서 판단되는 정보가 syntax이다. 그러나, 특정 조건에서는 Semantic정보를 알아야 Syntax정보를 파악할 수 있는 경우도 존재한다. == Syntax의 정의 == Syntax는 [[regular expression]]과 [[Backus-Naur form]]에 의해서 정의되며 nonterminals와 terminal symbol로 구성된다. 여기서 terminal symbol은 불변의 값 상수나 표현식을 의미하며, nonterminal symbol은 terminal symbol의 합으로 구성되는 집합기호를 의미한다. :<code><기호> = <표현식></code>에서 기호는 nonterminal, 표현식은 terminal의 집합이다. <syntaxhighlight lang="BNF"> expr ::= num | "(" expr "+" expr ")" | "(" expr "-" expr ")" </syntaxhighlight> 는 다음과 동일한 의미를 지닌다. <syntaxhighlight lang="BNF"> expr ::= num | "{" "+" expr expr "}" | "{" "-" expr expr "}" </syntaxhighlight> 즉 이처럼 syntax는 문법적 구조를 지니는 규칙이다. == Syntax의 종류 == === Concrete syntax === 구체적 문법은 정확히 어떻게 프로그래머가 프로그램을 작성해야 할지를 지시한다. 예를 들어서 C에서는 두 함수를 더하는 구문을 +로 정의하여서 <code>4 + 4</code>로 나타낼 수 있다. 그러나 이러한 구조를 새로운 언어에서는 다음과 같이 나태낼 수 도 있다. <code>+ 4 4</code>이처럼 구체적 문법은 프로그래머가 작성해야 하는 방식을 정의한다. '''구체적 문법'''은 "특정 프로그램이 정의하는 프로그래머가 따라야 하는 규칙"이다. === Abstract syntax === 요약 문법은 구체적 문법에서 공통으로 표현하는 것으로 표현하는 것을 의미한다. 구체적 문법과는 다르게 요약 문법에서는 symbol의 정의가 큰 의미가 없다. 대신 상징으로 다음과 같은 정의에서는 다음과 같은 문법이 도출된다는 Abtracted한 문법을 나타낸다. 즉 구체적 문법의 Abtraction이 요약 문법이다. '''요약 문법 (추상 문법)'''은 추상화된 문법의 규칙이다. Syntax 문서로 돌아갑니다.