지적했듯이, 인간은 영어, 프랑스어, 독일어와 같은 "자연"언어를 통해 서로 의사 소통합니다. 그것들은 의도적으로 발명하기보다는 자연스럽게 획득하기 때문에 자연이라고 불립니다 (에스페란토는 예외 임).
공식 언어는 어떤 목적이나 다른 목적으로 개발 된 언어입니다. 예를 들어 C와 같은 프로그래밍 언어는 컴퓨터 프로그래밍을 위해 고안된 공식 언어입니다.
모든 언어는 문법을 사용하여 설명 할 수 있습니다. 문법 계층은 1956 년 Noam Chomsky에 의해 설명되었습니다. 다음과 같은 수준으로 구성됩니다.
유형 0 문법 (제한되지 않은 문법). 그것들은 가장 일반적이며 Turing Machine과 동일합니다. 따라서 주어진 문자열이 제한되지 않은 문법의 일부인지를 결정하는 문제는 결정할 수 없습니다.
유형 -1 문법 (문맥에 맞는 문법) 영어와 같은 거의 모든 자연 언어는 상황에 따라 다릅니다. 영어에서 문맥 감도의 예는 "화살표처럼 날아갑니다"라는 두 문구입니다. "과일은 바나나처럼 날아갑니다." 일반적으로 컴퓨터가 상황에 맞는 언어를 이해하기 어렵습니다.
유형 -2 문법 (문맥이없는). 문맥없는 언어는 대부분의 프로그래밍 언어의 구문에 대한 이론적 근거입니다.
유형 3 문법 (정규 문법) 정규 언어 패밀리는 정규 표현식으로 얻을 수 있습니다. 정규 언어는 일반적으로 검색 패턴과 프로그래밍 언어의 어휘 구조를 정의하는 데 사용됩니다.
유형 2 (문맥이없는)와 유형 3 (정규) 문법은 파서가 효율적으로 구현 될 수 있기 때문에 컴퓨터에서 가장 자주 사용됩니다.
BNF (Backus Normal Form 또는 Backus–Naur Form) 는 문맥없는 문법에 대한 표기법으로, 종종 컴퓨팅에 사용되는 언어의 구문을 설명하는 데 사용됩니다.
예를 들어 식별자는 다음과 같이 설명 될 수 있습니다.
<identifier> ::= <letter> { <letter> | <digit> }
즉, 문자로 시작해야하며 추가 문자 나 숫자를 포함 할 수 있습니다.
이전에는 문자가 'a'| 'b'| 'c'등이 있으며 숫자는 동일한 유형의 표기법을 사용하여 '0'에서 '9'로 정의됩니다.
AC "for"문은 다음과 같이 정의 될 수 있습니다.
<for_statement> ::=
'for' '(' <expression> ';' <expression> ';' <expression> ')' <statement>
그런 다음 어휘 분석기 및 파서 (컴파일러 또는 인터프리터의 첫 단계)는 특정 언어에 대해 BNF에서 설명하는 특정 문법을 허용하도록 구성됩니다. 어휘 분석기는 일반적으로 언어의 다양한 토큰 (예 : 키워드, 식별자 또는 숫자)을 분리하는 데 사용되며 파서는 "for"문 구성 방식과 같이 토큰이 함께 작동하는 방식을 파악하는 데 사용됩니다. .