문제

확장 된 backus-naur 폼 (EBNF) 컨텍스트 자유 문법을 사용하여 정렬되지 않은 값 집합을 정의하고 싶습니다.EBNF에서 정렬되지 않은 값 목록을 정의하는 것은 쉽습니다 (예 :

)
value = 'A' | 'B' | 'C';
list = value, {',', value};
.

그러나 정렬되지 않은 세트에 대해 의심 할 수 있습니다.

아래의 유효한 정렬되지 않은 값 집합의 예는 다음과 같습니다.

A, B, C, D
A, B, D, C
A, D, C, B
...
D, C, B, A
.

유효하지 않은 목록은 다음과 같습니다.

A, A, C, D
B, C, C, B
A, A, A, A
...
.

또는 임의의 길이 목록.

A, A, B, C, D, A
A, B, C, D, A, B, C, D
...
.

도움이 되었습니까?

해결책

은 EBNF에서 정렬되지 않은 세트를 정의 할 수 있지만 가능한 모든 열거 형을 나열합니다. 두 가지 요소보다 큰 세트가 비실용적입니다.

표준 - EBNF가있는 정도까지 표준화 된 표기법 - 그렇지 않으면 설명 할 수없는 시퀀스를 설명하기 위해 영어 (또는 편안한 기다린 다른 언어)를 사용할 수 있습니다. 예를 들어, EBNF의 EBNF는이 생산을 포함합니다 :

syntactic exception
= ? a syntactic-factor that could be replaced 
    by a syntactic-factor containing no
    meta-identifiers
  ? ;
.

마찬가지로 다음과 같이 쓸 수 있습니다 :

value = 'A' | 'B' | 'C';
list = value, {',', value};
set = ? a "list" where all "value"s are unique ? ;
.

또는 아마도

set = ? a "list" with exactly three values
        where all "value"s are unique
      ? ;
.

구문 분석기 생성기를 구축하는 데별로 사용되지는 않지만 동일한 언어를 이해하는 인간 리더에게 도움이 될 수 있습니다.

실제 파서 생성기의 경우, 일반적인 요소가 포함될 수있는 모든 목록을 허용 한 다음 의미 분석 중에 잘못된 목록을 거부하는 것입니다. (또는 심지어 더 일찍. 어려운 분석이 아닙니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top