ebnf 예제

예를 들어, 클래식 모호한 표현 문법을 고려: 우선 순위를 관리 하는 전통적인 방법은 서로 참조 하는 다른 규칙의 목록을 정의 하는 것입니다. 최상위 수준에서는 표현식과 같은 보다 추상적인 규칙이 있으며, 맨 아래 수준에서는 단일 용어와 같이 가장 작은 구성 요소를 나타내는 규칙이 있습니다. 일반적인 예는 TinyC에 표시됩니다: 이 문서에서는 모든 EBNF에 적용되는 예제에 대해 ISO에서 지정한 EBNF를 사용합니다. 다른 EBNF 변형은 다소 다른 구문 규칙을 사용합니다. 따라서 EBNF의 확장은 해당 표기법의 사용을 사용할 수 있습니다. 예를 들어 Lisp 문법에서 함수 응용 프로그램은 다음 규칙에 의해 정의될 수 있습니다. 그리고 이름. 우리는 이러한 모든 예가 구문적으로 올바른 언어를 상상할 수 있습니다, 즉, 그들은 언어의 문법에 따라 구축됩니다. 그러나 언어를 사용하는 방법에 대한 추가 제약 조건을 준수하지 않기 때문에 모두 형식적으로 올바르지 않습니다. 이러한 의미 체계 제약 조건은 언어의 구조가 인식 된 후 문법에 추가하여 사용됩니다. 문법에서 선언과 같은 것들은 특정 키워드와 이름으로 구성되어야하며 의미 체계 적 제약 조건은 두 선언이 같은 이름을 가져야한다고 말할 수 있습니다.

구문 규칙과 의미 체계 규칙을 결합하여 우리는 우리의 언어로 유효한 것을 표현 할 수 있습니다. ISO 14977 표준 EBNF에 따르면 확장 할 수 있으며 두 가지 시설이 언급됩니다. 첫 번째는 EBNF 문법의 일부입니다, 물음표로 둘러싸인 임의의 텍스트입니다 특수 시퀀스. 특수 시퀀스 내의 텍스트 해석은 EBNF 표준의 범위를 벗어납니다. 예를 들어 공간 문자는 다음 규칙에 의해 정의될 수 있습니다. 또는 도메인 별 언어(DSL)를 참조하십시오. 자바, XML 및 CSS는 모두 형식 언어의 예입니다. TinyC는 C의 단순화 된 버전입니다. 일반적인 프로그래밍 언어에 대한 문법이 너무 복잡해서 예제로 사용할 수 없기 때문에 선택했습니다. 우리는 일반적으로 1,000 줄보다 긴 문법을 볼 것입니다. 왼쪽 되풀이 문법이 더 일반적입니다.

예를 들어 쉼표(예: john, coffee, logic)로 구분된 단어 목록을 정의하려면 „목록은 쉼표와 단어의 많은 쌍 뒤에 있는 한 단어”와 유사한 단어를 말하고 싶습니다. 당신은 EBNF와 같은 말을 할 수 있습니다. 대신 기본 BNF 형식에는 „많은”과 동등한 것이 없습니다. 그래서 같은 일을 설명하기 위해 당신은 „목록은 쉼표와 단어의 쌍 뒤에 하나의 단어 또는 목록입니다”와 같은 말을해야합니다. 이 작업은 작동하지만 한 목록을 정의하지 않고 중첩된 일련의 목록을 정의하지 않기 때문에 복잡합니다. github에서 사용할 수 있는 목록에서 가져온 문법의 몇 가지 예를 살펴보겠습니다. 나중에 우리는 규칙을 설명하는 동안 그들을 참조 할 수 있습니다. 파이썬에서 부동 점 리터럴의 정의는 몇 가지 표기법을 결합의 좋은 예입니다 : 우리가 논의하지 않은 것들이 있습니다 : 예를 들어 EBNF의 생성또는 Chomsky와 다른 과학자의 작품에 뿌리를 이끄는 역사.

우리는 문맥 무료 문법이 무엇인지 논의하지 않았습니다. 이 이론은 EBNF가 가능한 모든 형태의 문법을 설명하는 데 사용할 수 없다고 말합니다. 그러나 그것은 당신이 쓰기에 관심이 있어야하는 모든 공식 언어를 설명하기에 충분히 강력하다. 이 예제에서는 프로그램에 하나 이상의 문이 있어야 한다고 말합니다.