백커스-나우어 형태

Backus–Naur form

컴퓨터 과학에서 백커스-나우어 형태(/ ˌb æk əs ˈna ʊər/)는 프로그래밍 언어나 다른 형식 언어의 구문설명하는 데 사용되는 표기법입니다. 존 배커스피터 나우르가 개발했습니다. BNF는 문맥 자유 문법에 대한 메타신택스 표기법으로 설명할 수 있습니다. Backus-Naur 양식은 공식 언어 사양, 매뉴얼, 프로그래밍 언어 이론 교과서 등 언어에 대한 정확한 설명이 필요한 곳에 적용됩니다. BNF는 문서 형식, 명령 세트 및 통신 프로토콜을 설명하는 데 사용할 수 있습니다.

원래의 백커스-나우어 표기법의 많은 확장과 변형이 사용됩니다. 확장 백커스-나우어 형태(EBNF)와 확장 백커스-나우어 형태(ABNF)를 포함하여 일부는 정확하게 정의됩니다.

개요

BNF 사양은 다음과 같이 작성된 파생 규칙 집합입니다.

 <symbol> ::= __express이온__ 

위치:

  • <symbol>는 항상 쌍 <> 사이에 포함되는 비종단 변수입니다.
  • ::= 왼쪽에 있는 기호가 오른쪽에 있는 표현으로 바뀌어야 한다는 것을 의미합니다.
  • __expression__은 각 시퀀스가 수직 막대 ""로 구분되는 말단 또는 비말단 심볼의 하나 이상의 시퀀스로 구성되며, 전체는 왼쪽 심볼의 가능한 대체입니다.

예를 들어, 미국 우편 주소에 대해 가능한 BNF를 생각해 보십시오.

 <postal-address> ::= <name-part> <street-address> <zip-part> <name-part> ::= <personal-part> <last-name> <opt-suffix-part> <EOL> <personal-part> <personal-part> ::= <first-name> <initial> ". <street-address> := <house-num> <street-name> <opt-apt-num> <zip-part> ::= <town-name>," <state-code> <ZIP-code> <EOL> <opt-suffix-part> ::= "Sr." "Jr." <roman-numer>" "<opt-apt-num> ::= "Apt" <apt-num>" 

영어로 번역하면 다음과 같습니다.

  • 우편 주소는 이름 부분, 그 다음에 거리 주소 부분, 그 다음에 우편 번호 부분으로 구성됩니다.
  • 이름 부분은 성에 오는 개인 부분과 선택적인 접미사(Jr., Sr. 또는 다이너스티 번호)가 뒤따르는 개인 부분, 또는 이름 부분 뒤에 오는 개인 부분(이 규칙은 BNF에서 재귀의 사용을 보여주며, 여러 개의 이름과 중간 이름 및 이니셜을 사용하는 사람들의 경우를 포함합니다)으로 구성됩니다.
  • 개인 파트는 이름 또는 이니셜 뒤에 점이 오는 것으로 구성됩니다.
  • 거리 주소는 집 번호, 거리 이름, 선택적 아파트 지정자, 끝줄로 구성됩니다.
  • Zip-part는 마을 이름 뒤에 쉼표, 상태 코드 뒤에 ZIP-code, 그리고 끝줄로 구성됩니다.
  • opt-suffix-part는 "Sr", "Jr" 또는 로마 숫자와 같은 접미사 또는 빈 문자열(즉, 아무것도 없음)로 구성됩니다.
  • opt-apt-num은 접두사 "Apt" 뒤에 아파트 번호가 붙거나 빈 문자열(즉, nothing)로 구성됩니다.

여기에는 이름, 아파트 번호, ZIP-코드 및 로마 번호와 같은 많은 형식이 지정되지 않은 채로 남아 있습니다. 필요한 경우 추가 BNF 규칙을 사용하여 설명할 수 있습니다.

역사

다시 쓰기 규칙을 사용하여 언어의 구조를 설명하는 아이디어는 적어도 기원전 6세기에서 4세기 사이에 살았던 고대 인도 산스크리트어 문법학자이자 힌두교에서 존경받는 학자인 ṇ리니의 작품으로 거슬러 올라갈 수 있습니다. 산스크리트어 단어 구조를 설명하기 위한 그의 표기법은 백커스와 동등한 힘을 가지며 많은 유사한 특성을 가지고 있습니다.

서양 사회에서 문법은 오랫동안 과학적 연구가 아닌 교육의 주제로 여겨졌고, 기술은 비공식적이고 실용적인 사용을 목표로 했습니다. 20세기 전반에 레너드 블룸필드(Leonard Bloomfield)와 질그 해리스(Zeig Harris)와 같은 언어학자들은 구 구조를 포함하여 언어의 설명을 공식화하려는 시도를 시작했습니다.

한편, 공식적인 논리 체계로서의 문자열 다시 쓰기 규칙은 Axel Thue (1914년), Emil Post (1920년대-40년대), Alan Turing (1936년)과 같은 수학자들에 의해 소개되고 연구되었습니다. MIT에서 정보 이론 학생들에게 언어학을 가르치는 노암 촘스키는 본질적으로 튜의 형식주의인 것을 자연어의 구문 설명의 기초로 삼음으로써 언어학과 수학을 결합했습니다. 그는 또한 생성 규칙(맥락 없는 문법의 규칙)과 변환 규칙(1956) 사이의 명확한 구분을 소개했습니다.[4][5]

IBM의 프로그래밍 언어 디자이너인 John Backus는 오늘날 ALGOL 58(1959)로 알려진 새로운 프로그래밍 언어 IAL의 구문을 설명하기 위해 "금속 언어 공식"[1][7][8]이라는 금속 언어를 제안했습니다. 그의 표기법은 ALGOL 60 보고서에서 처음 사용되었습니다.

BNF는 Chomsky의 문맥 자유 문법의 표기법입니다. 백커스는 촘스키의 작업에 익숙했습니다.[9]

백커스가 제안한 바와 같이, 이 공식은 이름이 각괄호로 둘러싸인 "클래스"를 정의했습니다. 예를들면, <ab>. 각각의 이름은 기본 기호의 클래스를 나타냅니다.[1]

ALGOL의 추가적인 개발은 ALGOL 60으로 이어졌습니다. 1963년 위원회의 보고서에서 피터 나우르는 백쿠스의 표기법을 백쿠스 정상 형태라고 불렀습니다. Donald Knuth는 BNF가 예를 들어 Chomsky normal form[10]달리 "상습적인 의미에서 정상적인 형태가 아니기 때문에 Backus-Naur form으로 읽혀야 한다고 주장했습니다. 확장 백커스 정규형이 정확하지 않을 수 있다는 과, 앞서 파 ṇ리니가 독자적으로 유사한 표기법을 개발했다는 점에서 파 ṇ리니 백커스 형식이라는 이름도 한때 제안되었습니다.

BNF는 Peter Naur에 의해 ALGOL 60 보고서에서 다음과 같은 금속 언어 공식으로 설명됩니다.[12]

괄호 안에 포함된 문자의 시퀀스는 값이 기호의 시퀀스인 금속 언어 변수를 나타냅니다. ":="와 ""(또는 "의 의미를 가진 후자)는 금속어 연결어입니다. 공식에서 변수나 연결 변수가 아닌 모든 표시는 자신을 나타냅니다. 공식에 표시된 표식 또는 변수의 병치는 표시된 순서의 병치를 의미합니다.

ALGOL 60 보고서의 또 다른 예는 BNF 금속 언어와 Chomsky 문맥 없는 문법 사이의 주요 차이점을 보여줍니다. 금속 언어 변수는 그 형성을 정의하는 규칙을 필요로 하지 않습니다. 이러한 구성은 <> 괄호 안에서 자연어로 간단히 설명할 수 있습니다. 다음의 ALGOL 60 보고서 섹션 2.3 주석 명세는 이것의 작동 방식을 예시합니다.

프로그램의 기호 중 텍스트를 포함할 목적으로 다음 "댓글" 규칙이 있습니다.

기본 기호의 순서: 다음과 같습니다.
;comment <';'을 포함하지 않는 모든 시퀀스>; ;
주석을 시작합니다 <';'을 포함하지 않는 모든 시퀀스>; 시작한다.
end <'end' 또는 '',' 또는 'else'를 포함하지 않는 시퀀스> 끝.

여기서 등가성이란 문자열 외부에서 발생할 경우 프로그램 동작에 영향을 주지 않고 오른쪽 열의 동일한 줄에 표시된 기호로 왼쪽 열에 표시된 세 가지 구조 중 하나를 대체할 수 있음을 의미합니다.

나우르는 백커스의 두 개의 상징을 일반적으로 사용 가능한 문자로 바꿨습니다.::= 기호는 원래는 :≡.그 기호는 원래 "또는"이라는 단어였습니다(그 위에 막대가 있습니다).[7]: 14

BNF는 논리 회로 설계에 사용되었던 표준 형태의 부울 대수 방정식과 매우 유사합니다. 백커스는 수학자이자 포트란 프로그래밍 언어의 설계자였습니다. 부울 대수학에 대한 연구는 일반적으로 수학 교육 과정의 일부입니다. 백커스도 나우르도 여기에 포함된 이름을 설명하지 않았습니다. < > terminals이 아닌 것처럼 촘스키의 용어는 원래 BNF를 설명하는 데 사용되지 않았습니다. Naur는 나중에 ALGOL 과정 자료에서 이들을 수업이라고 설명했습니다.[1] ALGOL 60 보고서에서 그들은 금속 언어 변수라고 불렸습니다. 메타 기호 이외의 것은 ::=, , 그리고 에 동봉된 클래스 이름. < > 정의할 언어의 기호입니다. 메타 기호 ::= 는 "로 정의됨"으로 해석됩니다. 는 대체 정의를 구분하는 데 사용되며 "또는"으로 해석됩니다. 메타 기호들 < > 클래스 이름을 포함하는 구분 기호입니다. BNF는 Peter Naur와 Saul Rosen에 의해 ALGOL에 대해 이야기하기 위한 금속 언어로 묘사됩니다.[1]

1947년 Saul Rosen처음에는 IAL 그룹이 된 언어 위원회의 활동에 참여했고 결국 ALGOL로 이어졌습니다. 그는 ACM의 커뮤니케이션즈의 첫 번째 편집장이었습니다.[clarification needed] BNF는 ALGOL 60 보고서에서 ALGOL 언어에 대해 이야기하기 위한 금속 언어로 처음 사용되었습니다. 피터 나우르가 1962년에 개발한 알골 프로그래밍 과정 자료에 그렇게 설명되어 있습니다.[1] IBM, Honeywell, Burroughs 및 Digital Equipment Corporation의 초기 ALGOL 매뉴얼은 ALGOL 60 보고서를 따라 금속 언어로 사용했습니다. 사울[13] 로젠은 BNF를 알골(ALGOL)에 대해 이야기하기 위한 금속어로 묘사하고 있습니다. 금속어로 사용되는 예로는 산술적인 표현을 정의하는 것이 있습니다.

<특출한> ::= <용어> <특출한><덧대다><용어> 

대안의 첫 번째 기호는 정의되는 클래스, Naur에 의해 설명된 바와 같이 대체 시퀀스가 이전 대안으로 재귀적으로 시작될 수 있고 임의의 횟수로 반복될 수 있음을 지정하는 기능을 갖는 반복일 수 있습니다.[1] 예를 들어 위에 <expr> 로 정의됩니다. <term> 그 다음에 얼마든지 <addop> <term>.

쇼레의 메타 II와 같은 일부 후기 금속 언어에서는 BNF 재귀 반복 구조가 인용 문자열을 사용하여 정의된 시퀀스 연산자 및 대상 언어 기호로 대체됩니다.< 그리고. > 괄호가 제거되었습니다. 괄호 () 수학적 그룹화를 위해 추가되었습니다.<expr> 규칙은 메타 II에 다음과 같이 표시됩니다.

EXPR = TERM $('+' TERM .OUT('ADD') '- TERM .OUT('SUB'); 

이러한 변화로 인해 메타 II와 파생 프로그래밍 언어는 자연 언어 설명, 금속 언어 변수, 언어 구성 설명을 사용할 수 있는 비용으로 자체 금속 언어를 정의하고 확장할 수 있었습니다. 많은 스핀오프 금속 언어는 BNF에서 영감을 받았습니다.[citation needed] META II, TREE-META메타컴파일러를 참조하십시오.

BNF 클래스는 패턴 또는 패턴을 형성하는 동작으로 정의되는 형성과 함께 언어 구성체 형성을 설명합니다. 클래스 이름 expr은 자연어로 다음과 같이 설명됩니다. <term> 차례차례에 이어 <addop> <term>. 클래스는 추상화입니다. 우리는 클래스의 형성과 무관하게 클래스에 대해 이야기할 수 있습니다. 우리는 용어의 정의와 무관하게 expr에서 추가되거나 차감되는 것으로 말할 수 있습니다. 특정 데이터 유형이라는 용어와 데이터 유형의 특정 조합을 사용하여 표현식을 평가하는 방법 또는 혼합된 유형의 데이터 유형 및 평가 결과에 대한 표현식의 순서를 변경하는 방법에 대해 설명할 수 있습니다. 자연 언어 보충은 컴파일러 구현과 ALGOL 프로그램을 작성하는 프로그래머가 사용할 언어 클래스 의미론에 대한 구체적인 세부 정보를 제공했습니다. 자연어 설명은 구문도 더욱 보완했습니다. 정수 규칙은 구문을 설명하는 데 사용되는 자연어와 금속어의 좋은 예입니다.

<정수의> ::= <디지트> <정수의><디지트> 

위의 흰색 공간에 대한 자세한 내용은 없습니다. 규칙에 따르면, 우리는 숫자 사이에 공백을 가질 수 있습니다. 자연어에서 우리는 숫자 시퀀스가 숫자 사이에 공백을 가질 수 없다고 설명함으로써 BNF 금속 언어를 보완합니다. 영어는 가능한 자연어 중 하나일 뿐입니다. ALGOL 보고서의 번역은 많은 자연 언어로 제공되었습니다.

BNF의 기원은 프로그래밍 언어 개발에 미치는 영향만큼 중요하지 않습니다.[citation needed] ALGOL 60 보고서가 출판된 직후 기간 동안 BNF는 많은 컴파일러 컴파일러 시스템의 기반이 되었습니다.

에드가 T가 개발한 "A Syntax Directed Compiler for A ALGOL 60"과 같은 것들. 브루커와 모리스가 개발한 아이언과 "A Compiler Building System"은 BNF를 직접 사용했습니다. 쇼레 메타컴파일러와 같은 다른 이들은 약간의 변경만으로 프로그래밍 언어로 만들었습니다. <class name> 기호 식별자가 되어 <,>를 포함하는 문자열을 삭제하고 대상 언어의 기호에 따옴표로 된 문자열을 사용합니다. 산술과 같은 그룹화는 그룹화가 유일한 값인 클래스를 사용하여 제거하는 단순화를 제공했습니다. META II 산술 표현 규칙은 그룹화 사용을 보여줍니다. META II 규칙에 배치된 출력식은 코드 및 레이블을 어셈블리 언어로 출력하는 데 사용됩니다. META II의 규칙은 BNF의 클래스 정의와 동일합니다. 유닉스 유틸리티 yacc는 메타 II와 유사한 코드 생산을 하는 BNF를 기반으로 합니다. yacc는 파서 생성기로 가장 일반적으로 사용되며, 그 루트는 분명히 BNF입니다.

BNF는 오늘날 여전히 사용되고 있는 가장 오래된 컴퓨터 관련 언어 중 하나입니다.[citation needed]

추가 예

BNF syntax diagram
BNF 구문도

BNF의 구문 자체는 다음과 같은 BNF로 표현될 수 있습니다.

 <syntax> ::= <룰> <syntax> <> ::= <opt-whitespace> "<" <룰-이름> ">" <opt-whitespace> ":=" <opt-whitespace> ":=" <opt-whitespace> <express이온> <라인엔드> <opt-whitespace> := " <list> <express이온> := <list> <opt-whitespace> <express이온> ::= <opt-whitespace> <line-end> <list> ::> <term> <term> <opt-whitespace> <list> <term> ::= <literal> <규칙-이름> <literal> ::= <text1> <text2> <text1> <text2> ::= <문자1> <text2> := <문자2> <문자> := <문자> <digit> <symbol> ::= "A" "B" "D" "F" "G" "H" "I" "J" "K" "L" "M" "N"   "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "o" "p" "q" "r" "t" "v" "x" "z" <digit> : = "0" "1" "2" "3" "4" "6" "7" "8" <symbol> : "= " " " " " " " " " " "!"   "#" "$" "%" "&" "("") "*" "+", "-" "./" ":" ";" "> "=" "<"?" "@" "" "\" "\"" "^" "_" "{"}" "~" <character1> ::= <charter2> ":= <문자> """" "룰-이름" ::= <rule-name> <rule-char> ::= <문자> <digit> "-" 

"은(는) 빈 문자열입니다.

원본 BNF는 다음과 같이 견적을 사용하지 않았습니다. <literal> 규칙. 규칙을 적절하게 해석하기 위해 공백이 필요하지 않다고 가정합니다.

<EOL> 는 (운영 체제에 따라 ASCII, 캐리지-리턴, 라인 피드 또는 둘 다로 표시되는) 적절한 라인 엔드 지정자를 나타냅니다. <rule-name> 그리고. <text> 각각 선언된 규칙의 이름/라벨 또는 문자 그대로의 텍스트로 대체됩니다.

위의 미국 우편 주소 예에서, 전체 블록 인용문은 <syntax>. 각 줄 또는 끊기지 않은 줄 그룹은 규칙입니다. 예를 들어, 하나의 규칙은 다음으로 시작합니다. <name-part> ::=. 이 규칙의 다른 부분(선 끝에서 제외)은 수직 막대로 구분된 두 개의 목록으로 구성된 식입니다. . 이 두 개의 목록은 몇 개의 항(각각 세 개의 항과 두 개의 항)으로 구성됩니다. 이 특정 규칙의 각 용어는 규칙 이름입니다.

변종

EBNF

BNF에는 일반적으로 단순성과 간결성을 위해 또는 특정 애플리케이션에 적용하기 위해 많은 변형 및 확장이 있습니다. 많은 변형의 공통적인 특징 중 하나는 다음과 같은 정규 표현식 반복 연산자를 사용하는 것입니다. * 그리고. +. 확장 백커스-나우어 형태(EBNF)는 일반적인 형태입니다.

또 다른 일반적인 확장은 옵션 항목 주위에 대괄호를 사용하는 것입니다. 원래의 ALGOL 60 보고서에는 없지만( 년 후 IBM의 PL/I 정의에 도입됨), 이 표기법은 현재 보편적으로 인정되고 있습니다.

ABNF

증강 백커스-나우어 형태(ABNF)와 라우팅 백커스-나우어 형태(RBNF)[14]는 일반적으로 IETF(Internet Engineering Task Force) 프로토콜을 설명하는 데 사용되는 확장입니다.

구문 분석 표현 문법은 BNF와 정규 표현식 표기법을 기반으로 하여 형식 문법의 대체 클래스를 형성하며, 이는 본질적으로 생성적이지 않고 분석적입니다.

다른이들

오늘날 온라인에서 발견되는 많은 BNF 사양은 사람이 읽을 수 있도록 설계되었으며 비공식적입니다. 여기에는 종종 다음과 같은 구문 규칙 및 확장이 포함됩니다.

  • 대괄호로 둘러싸인 옵션 항목: [<item-x>].
  • 0회 이상 존재하는 항목은 꼬불꼬불한 괄호 안에 넣거나 별표()로 접미사를 붙입니다.*)와 같은 <word> ::= <letter> {<letter>} 아니면 <word> ::= <letter> <letter>* 각각 다음과 같다.
  • 1회 이상 존재하는 항목에 덧셈(플러스) 기호를 붙였습니다. +,예를 들어 <word> ::= <letter>+.
  • 터미널은 이탤릭체가 아닌 굵은 글씨로, 터미널은 각도 괄호가 아닌 일반 텍스트로 표시될 수 있습니다.
  • 항목이 그룹화된 곳에서는 단순 괄호 안에 들어 있습니다.

BNF 또는 변종을 사용하는 소프트웨어

BNF(또는 수퍼셋)를 입력으로 받아들이는 소프트웨어

  • 자바로 작성된 파서 생성기인 ANTLR
  • Coco/R, EBNF에서 속성 문법을 수용하는 컴파일러 생성기
  • 임의 언어를 위한 DMS 소프트웨어 리엔지니어링 툴킷, 프로그램 분석 및 변환 시스템
  • BNF 파서 발생기인 GOLD
  • RPA BNF parser.[15] 온라인(PHP) 데모 파싱: 자바스크립트, XML
  • 언어 번역 프로그래밍을 위한 규칙 기반 [16]전문가 시스템인 XACT X4MR 시스템
  • XPL Analyzer(XPL Analyzer)는 언어에 대한 단순화된 BNF를 수용하고 XPL에서 해당 언어에 대한 파서를 생성하는 도구입니다. 제공된 STELK 프로그램에 통합되어 언어를 디버깅할[17] 수 있습니다(SHARE 기여 프로그램으로 컴파일러 제너레이터[18] 선행됨).
  • 범용 구문 검증 유틸리티인 [19]bnfparser2
  • bnf2xml,[20] 고급 BNF 매칭을 이용한 XML 태그를 이용한 마크업 입력
  • JavaCC,[21] Java 컴파일러 tm (JavaCC tm) - Java Parser Generator

비슷한 소프트웨어

  • GNU 들소, GNU 버전의 yacc
  • Yacc, 파서 생성기(Lex 전처리기와 함께 가장 일반적으로 사용됨)
  • 라켓의 파서 도구, 렉스 및 야크 스타일 파싱 (아름다운 라켓 에디션)
  • BI 도구인 Qlik Sense는 BNF의 변형을 스크립팅에 사용합니다.
  • BNF 컨버터(BNFC[23]), "LBNF(Labeled Backus–Naur form)"라는 변형 모델에서 작동합니다. 이 변형에서는 주어진 비-말단에 대한 각 제작물에 레이블이 부여되며, 이 레이블은 해당 비-말단을 나타내는 대수적 데이터 유형의 생성자로 사용될 수 있습니다. 변환기는 Haskell 및 Java를 포함한 여러 언어에서 추상 구문을 위한 유형 및 구문 분석기를 생성할 수 있습니다.

참고 항목

참고문헌

  1. ^ a b c d e f g 구문식의 의미는 괄호 안에 포함된 단어들이 다음과 같이 말함으로써 더욱 설명될 수 있습니다. < >,맘에 들다 <ab>, 멤버가 기본 기호의 시퀀스인 클래스를 나타냅니다. 이러한 종류의 클래스 지정은 언어의 모든 설명에서 찾을 수 있습니다. 단어, 동사, 명사와 같은 일반적인 자연 언어 지정을 설명하는 데 사용됩니다.[6]: 5, Note 1
  2. ^ "Panini biography". School of Mathematics and Statistics, University of St Andrews, Scotland. Retrieved 2014-03-22.
  3. ^ 잉거만은 최초의 독립적인 발명가인 파 ṇ리니의 공로를 인정하기 위해, 바커스 노멀 양식을 파 ṇ리니-바커스 양식으로 이름을 바꾸라고 제안했습니다.
  4. ^ Chomsky, Noam (1956). "Three models for the description of language" (PDF). IRE Transactions on Information Theory. 2 (3): 113–24. doi:10.1109/TIT.1956.1056813. S2CID 19519474. Archived from the original (PDF) on 2010-09-19.
  5. ^ Chomsky, Noam (1957). Syntactic Structures. The Hague: Mouton.
  6. ^ Naur, Peter (1961). "A COURSE OF ALGO L 60 PROGRAMMING with special reference to the DASK ALGOL system" (PDF). Copenhagen: Regnecentralen. Retrieved 26 March 2015.
  7. ^ a b Backus, J. W. (1959). "The syntax and semantics of the proposed international algebraic language of the Zurich ACM-GAMM Conference". Proceedings of the International Conference on Information Processing. UNESCO. pp. 125–132.
  8. ^ Farrell, James A. (August 1995). "Compiler Basics: Extended Backus Naur Form". Archived from the original on 5 June 2011. Retrieved May 11, 2011.
  9. ^ Fulton, III, Scott M. (20 March 2007). "John W. Backus (1924 - 2007)". BetaNews. Inc. Retrieved Jun 3, 2014.
  10. ^ Knuth, Donald E. (1964). "Backus Normal Form vs. Backus Naur Form". Communications of the ACM. 7 (12): 735–736. doi:10.1145/355588.365140. S2CID 47537431.
  11. ^ Ingerman, P. Z. (1967). ""Pāṇini Backus Form" suggested". Communications of the ACM. 10 (3): 137. doi:10.1145/363162.363165. S2CID 52817672.
  12. ^ ALGOL 60 보고서 섹션 개정. 1.1."ALGOL 60". Retrieved April 18, 2015.
  13. ^ Saul Rosen (Jan 1967). Programming Systems and Languages. McGraw Hill Computer Science Series. New York/NY: McGraw Hill. ISBN 978-0070537088.
  14. ^ RBNF.
  15. ^ "Online demo", RPatk, archived from the original on 2012-11-02, retrieved 2011-07-03
  16. ^ "Tools", Act world, archived from the original on 2013-01-29
  17. ^ 대상 프로세서가 시스템/360이거나, 심지어 z/시스템과 관련이 있고, 대상 언어가 PL/I(또는 실제로 XPL)와 유사한 경우, 필요한 코드 "이미터"는 XPL의 시스템/360용 "이미터"에서 채택될 수 있습니다.
  18. ^ McKeeman, W. M.; Horning, J.J.; Wortman, D. B. (1970). A Compiler Generator. Prentice-Hall. ISBN 978-0-13-155077-3.
  19. ^ "BNF parser²", Source forge (project)
  20. ^ bnf2xml
  21. ^ "JavaCC". Archived from the original on 2013-06-08. Retrieved 2013-09-25.
  22. ^ "Script Syntax - Qlik Sense on Windows". Qlik.com. QlikTech International AB. Retrieved 10 January 2022.
  23. ^ "BNFC", Language technology, SE: Chalmers

외부 링크

  • Garshol, Lars Marius, BNF and EBNF: What are they and how do they work?, NO: Priv.
  • RFC 5234 — 신택스 규격을 위한 증강 BNF: ABNF.
  • RFC 5511 — 라우팅 BNF: 다양한 프로토콜 사양에서 사용되는 구문.
  • ISO/IEC 14977:1996(E) Information Technology – Syntactic Metalanguage Extended BNF, 에서 또는 에서 사용할 수 있음(후자는 표지가 누락되어 있지만 그렇지 않은 경우에는 훨씬 더 깨끗함)

언어 문법