문법 규범: BNF와 ABNF
BNF
바코스 패러다임(BNF: Backus-Naur Form의 줄임말)은 John Backus와 Peter Naur가 먼저 도입한 컴퓨터 언어의 문법을 설명하는 기호집이다.현재, 거의 모든 새로운 프로그래밍 언어 서적의 저자들은 바코스 양식을 사용하여 프로그래밍 언어의 문법 규칙을 정의한다.
BNF에서 큰따옴표의 글자("word")는 이 문자 자체를 대표한다.더블quote는 더블 인덱스를 대표하는 데 사용됩니다.
큰따옴표 밖의 글자는 문법 부분을 대표한다.
<>: 에는 필수 옵션이 포함되어 있습니다.[]: 에는 옵션이 포함되어 있습니다.{}: 0에서 몇 번 반복할 수 있는 항목이 포함되어 있습니다.|: 좌우 양쪽에서 하나를 선택하는 것을 의미하며 "OR"에 해당한다.: =: 로 정의됨을 의미하는 "...":용어 기호[...]:옵션, 최대 한 번 발생:0회 포함 반복 항목(...):그룹화 |: 병렬 옵션, 기울임꼴 단어 하나만 선택할 수 있음: 매개 변수, 다른 곳에서 설명
다음은 BNF로 정의된 Java 언어의 For 문의 예입니다.
FOR_STATEMENT ::=
"for" "(" ( variable_declaration |
( expression ";" ) | ";" )
[ expression ] ";"
[ expression ] ";"
")" statement
잘 모르겠어요~~~ABNF
RFC2234는 확장된 바코스 패러다임(ABNF)을 정의했다.최근 몇 년 동안 인터넷의 정의에서 ABNF는 광범위하게 사용되었다.ABNF는 더 많은 개선을 했다.바코스 나우어 패러다임(ABNF)을 확충하는 것은 바코스 나우어 패러다임(BNF)을 기반으로 하지만 그 자체의 문법과 유도 규칙으로 구성된다.이런 원어의 발기 원칙은 통신 프로토콜(쌍방향 규범)로서의 언어의 형식 시스템을 묘사하는 것이다.RFC 4234에서 일반적으로 IETF 통신 프로토콜의 정의 언어로 작성됩니다.
ABNF 규정은 하나의 유도 규칙으로 다음과 같다.
= ; CR LF
이 규칙은 대소문자에 민감한 비종지부호입니다. 정의는 이 규칙을 정의하는 기호 시퀀스, 문서 주석으로 구성되며, 리턴 라인에서 끝납니다.
규칙 이름은 대소문자가 민감하지 않다.
,
,
와
는 모두 같은 규칙을 언급했다.규칙 이름은 알파벳에서 시작하는 알파벳, 숫자 및 하이픈으로 구성됩니다.규칙 이름은 꺾쇠 괄호("<
", ">
")로 둘러싸지 않아도 됩니다.그러나 이들은 불필요한 문장에서 규칙의 이름을 식별할 때 규칙의 이름을 정할 수 있다.ABNF는 7비트 ASCII 인코딩을 사용하여 8비트 영역에서 높은 위치를 0으로 설정합니다.끝 문자는 하나 이상의 숫자 문자로 지정됩니다.수치 문자는 기수 (b = 2진법, d = 10진법, x = 16진법) 에 따른 백분호
%
로 지정할 수 있으며, 그 다음에 이 수치나 수치의 직렬 (((.
으로 표시) 로 표시할 수 있다.예를 들어 리턴은 10진수%d13
또는 16진수%x0D
로 지정할 수 있다.캐리지 리턴은 %d13.10
로 지정할 수 있습니다.텍스트 본문은 따옴표
"
에 둘러싸인 문자열을 사용하여 지정합니다.이러한 문자열은 대소문자에 민감하지 않으며 사용되는 문자 세트는 US-ASCII입니다.그래서 문자열 "abc"는 "abc", "Abc", "aBc", "abC", "Abc", "ABC", "aBC"와 "ABC"와 일치합니다.대소문자의 민감한 일치에 대해 명확한 문자를 정의해야 합니다. 'aBc' 정의는 %d97 %d66 %d99
와 일치해야 합니다.조작부호
공백은 정의된 요소를 구분하는 데 사용됩니다. 공백을 분할자로 식별하려면 명확하게 포함해야 합니다.
직렬연결
1 2
규칙은 일련의 규칙 이름을 열거해서 정의할 수 있습니다.
문자열 "aba"를 일치시키려면 다음 규칙을 사용합니다.
fu = %x61; a
bar = %x62; b
mumble = fu bar fu
선택 항목
1 / 2
규칙은 백슬래시("
/
"로 구분된 다중 선택 규칙을 사용하여 정의할 수 있습니다.규칙 또는 규칙을 적용하려면 다음 규칙을 구성합니다.
fubar = fu / bar
선택 증가
1 =/ 2
규칙 이름과 정의 사이의 '
=/
' 를 사용하여 하나의 규칙에 보충 선택을 추가할 수 있습니다.규칙.
ruleset = alt1 / alt2 / alt3 / alt4 / alt5
... 과 같다
ruleset = alt1 / alt2
ruleset =/ alt3
ruleset =/ alt4 / alt5
값 범위
%c##-##
숫자 범위는 하이픈("
-
")을 사용하여 지정할 수 있습니다.규칙.
OCTAL = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7"
... 과 같다
OCTAL = %x30-37
시퀀스 그룹
( 1 2)
요소는 괄호 안에 배치되어 정의의 규칙을 조합할 수 있습니다.
"elem fubar snafu"또는 "elem tarfu snafu"와 일치하려면 다음 규칙을 구성할 수 있습니다.
group = elem (fubar / tarfu) snafu
"elem fubar"또는 "tarfu snafu"와 일치하려면 다음 규칙을 구성할 수 있습니다.
group = elem fubar / tarfu snafu
group = (elem fubar) / (tarfu snafu)
가변 반복
n*n
원소의 중복을 표시하려면 형식을 사용할 수 있습니다.
* 요소
선택 사항
은 포함할 요소의 최소 수를 0으로 설정합니다.선택할 수 있는
는 포함할 원소의 최대 수를 제시하는데, 절약은 무궁무진하다.0 또는 여러 원소에 사용
*
, 1 또는 여러 원소에 사용1*
, 2 또는 세 원소에 사용2*3
.특정 반복
n
명확한 수량의 원소를 표시할 수 있는 형식
원소.
은 *원소.
과 같다.2DIGIT
를 사용하면 두 개의 숫자를 얻고, 3DIGIT
를 사용하면 세 개의 숫자를 얻는다.(DIGIT는 아래 핵심 규칙에 정의되어 있음).옵션 시퀀스
[ ]
다음 옵션 요소의 구조가 등가임을 나타내려면 다음과 같이 하십시오.
[fubar snafu]
*1(fubar snafu)
0*1(fubar snafu)
메모
;
세미콜론("
;
")은 주석을 시작하고 이 줄의 끝까지 이어집니다.연산자 우선 순위
상기 조작부호는 가장 바인딩(binding)에서 가장 느슨한 바인딩까지의 주어진 우선순위가 있습니다.
핵심 규칙
핵심 규칙은 ABNF 표준에 정의되어 있다.
규칙.
형식 정의
보람
ALPHA
%x41-5A/ %x61-7A
대문자 및 소문자 ASCII(A-Z a-z)
DIGIT
%x30-39
숫자(0-9)
HEXDIG
DIGIT/"A"/"B"/"C"/"D"/"E"/"F"
16진수 (0-9 A-F a-f)
DQUOTE
%x22
더블 따옴표
SP
%x20
스페이스 바
HTAB
%x09
수평 tab
WSP
SP/HTAB
공백 및 수평 tab
LWSP
*(WSP/CRLF WSP)
선형 공백(줄 바꿈 이후)
VCHAR
%x21-7E
표시(인쇄) 문자
CHAR
%x01-7F
NUL 제외 7-비트 US-ASCII 문자
OCTET
%x00-FF
8비트 데이터
CTL
%x00-1F/ %x7F
제어 문자
CR
%x0D
되돌아가다
LF
%x0A
줄을 바꾸다
CRLF
CR LF
인터넷 표준 줄 바꿈
BIT
"0"/"1"
예.
바코스 범례(BNF) 항목의 우편 주소의 예는 다음과 같다.
postal-address = name-part street zip-part
name-part = *(personal-part SP) last-name [SP suffix] CRLF
name-part = / personal-part CRLF
personal-part = first-name / (initial ".")
first-name = *ALPHA
initial = ALPHA
last-name = *ALPHA
suffix = ("Jr." / "Sr." / 1*("I" / "V" / "X"))
street = [apt SP] house-num SP street-name CRLF
apt = 1*4DIGIT
house-num = 1*8(DIGIT / ALPHA)
street-name = 1*VCHAR
zip-part = town-name "," SP state 1*2SP zip-code CRLF
town-name = 1*(ALPHA / SP)
state = 2ALPHA
zip-code = 5DIGIT ["-" 4DIGIT]
인용하다
http://kb.cnblogs.com/page/189566/
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.