문법 규범: BNF와 ABNF

7712 단어 AndroidTTS
아침에 스마트 시전 프로젝트를 하고'내일 6시에 불을 켜라'는 말을 하면 스마트 콘센트가 6시에 불을 켜는데 이것은 음성 문법에 관련된 문제이다.아이플라이텍이 의미를 개발하기 때문에, 아이플라이텍의 SDK를 사용하기로 결정하였다.
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)에서 가장 느슨한 바인딩까지의 주어진 우선순위가 있습니다.
  • 문자열, 이름 형성(formation)
  • 참고 사항
  • 값 범위
  • 반복
  • 그룹, 옵션
  • 직렬 연결
  • 선택
  • 직렬과 함께 선택 조작부호를 사용하면 혼동을 일으킬 수 있으므로, 그룹을 나누어 명확한 직렬조를 만드는 것을 권장합니다.
    핵심 규칙
    핵심 규칙은 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/
  • RFC 4234Augmented BNF for Syntax Specifications: ABNF

  • 참고 자료
  • http://zh.wikipedia.org/wiki/바코스 모델 확충
  • 좋은 웹페이지 즐겨찾기