메타신택스
Metasyntax논리학과 컴퓨터 과학에서 메타세스는 자연어 또는 컴퓨터 프로그래밍 [1]언어를 기술하기 위해 사용되는 메타 언어의 구문과 문장의 허용 구조와 구성을 기술합니다.컴퓨터 언어에서 널리 사용되는 공식 언어로는 Backus-Naur 형식(BNF), 확장 Backus-Naur 형식(EBNF), Worth 구문 표기법(WSN), 증강 Backus-Naur 형식(ABNF)이 있습니다.
이러한 금속 언어에는 각각 종단 기호, 비단말 기호 및 메타즘볼로 구성된 자체 메타세(metasynthynax)가 있습니다.단어 또는 토큰과 같은 터미널 기호는 정의되는 언어의 독립 실행형 구조입니다.비말단 기호는 구문 카테고리를 나타내며, 하나 이상의 유효한 구절 또는 n 요소 서브셋으로 구성된 문장 구조를 정의합니다.메타셈볼은 지정된 메타세칙에서 표현 목적을 위한 구문 정보를 제공합니다.터미널, 비터미널 및 메타섬볼은 모든 메탈랭귀지에 적용되는 것은 아닙니다.
일반적으로 토큰 레벨 언어(정규 언어)의 메타 언어(정규 언어)에는 네스팅이 문제가 되지 않기 때문에 비종단어가 없습니다.영어는 특정 언어를 기술하기 위한 메타언어로서, 모든 설명은 영어 표현을 사용하여 할 수 있기 때문에 메타동작을 포함하지 않는다.메타비례에 terminals, nonterminals 및 metasmbols가 있는 재귀 언어(정식 문맥 자유 언어)를 기술하는 데 사용되는 특정 형식 언어만 있습니다.
메타세 요소
- 터미널: 독립 실행형 구문 구조입니다.터미널은 터미널 이름을 이중 따옴표로 나타낼 수 있습니다.
- 예.
"else"
,"if"
,"then"
,"while"
- Nonterminals: 요소의 하위 집합으로 구성된 허용 구문 구조 집합을 정의하는 기호 표현입니다.비단말기는 비단말기의 이름을 꺾쇠 괄호로 묶어서 나타낼 수 있습니다.
- 예.
<int>
,<char>
,<boolean>
- 메타셈볼: 구문 정보를 나타내는 상징적 표현.
- 예.
:=
,{}
,()
,[]
,*
구문의 종료 방법
- 병치: 예.
A B
- 대체: 예.
A B
- 반복: 예:
{A B}
- 옵션 문구: 예.
[A B]
- 그룹화: 예.
(A B)
특정 메타세법
표준규약
- 'Backus-Naur 형식'은 구문 범주의 이름을 꺾쇠 괄호로 묶어서 비말단 기호를 나타내며, 말단 단어를 이중 따옴표로 표현한다.단자는 메타섬볼의 왼쪽에 표시되지 않습니다.
::=
파생 규칙에서.오른쪽 정의의 본문은 메타섬볼에 의해 분리된 각 대체 구문 구조와 함께 몇 가지 대체 형식으로 구성될 수 있다. - 'Extended Backus-Naur form'은 BNF의 모든 기능을 사용하고 추가 기능을 위해 두 개의 메타섬볼을 추가했습니다.이 두 가지 새로운 특징 중 하나는 문장의 임의의 문구를 대괄호로 묶음으로써 나타내기 위해 적용된다.두 번째 기능은 0회 이상 반복되는 문구를 나타내기 위해 적용됩니다.
- 'Worth 구문 표기법'은 EBNF의 모든 기능을 사용합니다.단, 비단말기가 반드시 꺾쇠 괄호로 묶인 것은 아니지만 항상 EBNF의 오른쪽에 정의되어 있습니다.
=
생산 규칙에서.또, 모든 비터미널을 명시적으로 정의할 필요는 없습니다.다음과 같은 비종단말기<text>
그리고.<opt-whitespace>
는 각각 ASCII 문자와 옵션의 공백으로 암묵적으로 정의됩니다. - '증강된 배커스-나우르 형식'은 구문 범주의 이름으로 알파벳을 사용하여 한 단어 이름을 시작하여 비말단 기호를 나타낸다.꺾쇠 괄호는 필요하지 않습니다.종단 기호는 이중 따옴표로 묶은 단어로 나타내거나 다음 숫자 구조로 나타냅니다.
%
, 그 다음에b
또는x
또는d
, 뒤에 숫자 값 또는 숫자 값의 결합이 표시됩니다..
메타즘볼-
는 두 숫자 값 사이에 배치되어 값 범위를 나타냅니다.BNF와 마찬가지로 ABNF의 단자는 메타섬볼의 좌측에 발생하지 않습니다.=
파생 규칙에서.메타즘볼/
는 교체를 나타내고 있습니다.공백은 정의 본문의 요소를 구분하는 데 사용됩니다.ABNF에서의 반복에 대한 메타세에는 여러 가지 형태가 있다.a*
요소 앞에 있는 요소는 0회 이상 반복되는 요소를 나타냅니다.수치n1이어서*
그 뒤에 숫자 값n2다음에 이어지는 요소는 적어도 반복해야 할 요소를 나타낸다.n1몇 번이고 많아야n2times. 단일 숫자n요소 앞에 있는 것은 반복할 요소를 나타낸다n코멘트는 메타섬볼 뒤에 표현될 수 있습니다.;
EBNF에서와 같이 각 괄호로 묶은 문구는 옵션인 문구를 나타냅니다.
바리에이션
이러한 공식 금속 어구의 메타세 협정은 아직 공식화되지 않았다.다양한 컴퓨터 프로그래밍 언어의 참조 매뉴얼에는 많은 메타 문법적 변형 또는 확장자가 있습니다.비말단 및 단자를 나타내는 표준 규약의 한 가지 변형은 각 괄호 및 따옴표와 같은 메타심볼을 제거하고 의도된 단어에 글꼴 유형을 적용하는 것이다.예를 들어 Ada에서는 구문 범주는 의도된 단어 또는 기호에서 소문자 산세리프 글꼴을 적용하여 나타냅니다.Ada에서 모든 터미널 단어 또는 기호는 코드 위치 사이의 문자로 구성됩니다.16#20# 및 16#7E#(포함).각 문자 집합의 정의는 ISO/IEC 10646:2003에 의해 기술된 국제 표준을 참조한다.C 및 Java에서 구문 범주는 이탤릭체로 나타내며, 종단 기호는 고딕체로 나타냅니다.J에서는 metasyntax가 J의 구문을 기술하기 위해 metasymbols를 적용하지 않습니다.오히려 모든 통사적 설명은 J를 위해 유일하게 문서화된 영어 사전과 매우 유사한 메타 언어로 이루어집니다.
확장 기능의 이점
새로운 확장의 목적은 보다 단순하고 명확한 메타세(metasyntax)를 제공하는 것입니다.단순성 측면에서 볼 때, BNF의 메타노테이션은 오픈 엔드 및 클로즈 엔드 메타줌볼이 너무 풍부하게 나타나기 때문에 메타뉴섹스를 읽기 쉽게 하는 데 전혀 도움이 되지 않습니다.모호성 측면에서 BNF의 메타노테이션은 따옴표, 아포스트로피, 보다 작은 기호 또는 보다 큰 기호가 종단 기호로 사용될 때 불필요한 복잡성을 생성합니다.확장 메타세스는 문자의 대소문자, 글꼴, 코드 위치 등의 속성을 사용하여 앞에서 언급한 불필요한 복잡성을 줄입니다.또한 일부 금속 언어에서는 폰트 분리기 범주를 사용하여 배치 규칙을 위한 메타 구문적 특징을 통합하지만, BNF에서는 공식적으로 지원되지 않는다.