컴퓨터 과학의 맥락에서 단어 는 기호를 연결 한 것 입니다 . 사용되는 기호를 알파벳 이라고합니다 . 예를 들어, 알파벳 밖으로 형성 일부 단어는 {0,1,2,3,4,5,6,7,8,9}
것 1
, 2
, 12
, 543
, 1000
,와 002
.
언어는 모든 가능한 단어의 하위 집합입니다. 예를 들어 모든 엘리트 MI6 에이전트를 캡처하는 언어를 정의 할 수 있습니다. 두 번 0로 시작하는 모든 사람들, 언어의 단어가 될 수 있도록 007
, 001
, 005
,과 0012
, 그러나 07
나 15
. 간단하게하기 위해 우리는 언어가 " 알파벳에서 기호 를 연결하여 형성된 단어의 하위 집합"대신 "알파벳 위에 "있다고 말합니다 .
컴퓨터 과학에서 우리는 이제 언어를 분류하려고합니다. 단어의 모든 기호를 차례로 검사하여 알고리즘 / 일정 (유한) 메모리를 가진 기계를 사용하는 언어에 단어가 있는지 확인할 수있는 경우 언어를 정규화 라고합니다 . 단어만으로 구성된 언어 42
는 규칙적입니다. 임의의 메모리를 요구하지 않고도 단어가 포함되어 있는지 여부를 결정할 수 있기 때문입니다. 첫 번째 기호가 4인지, 두 번째 기호가 2인지, 더 많은 숫자가 뒤에 오는지 확인하기 만하면됩니다.
유한 한 수의 단어를 가진 모든 언어는 규칙적입니다. 왜냐하면 우리는 (이론적으로) 일정한 크기의 제어 흐름 트리를 구축 할 수 있기 때문 if
입니다. 예를 들어, 다음 구문을 사용하여 단어가 "10에서 99 사이의 프라임 숫자"언어로되어 있는지 테스트 할 수 있습니다. 현재 우리가있는 코드 라인에서 인코딩 할 메모리 외에는 메모리가 필요하지 않습니다.
if word[0] == 1:
if word[1] == 1: # 11
return true # "accept" word, i.e. it's in the language
if word[1] == 3: # 13
return true
...
return false
모든 유한 언어는 일반 언어이지만 모든 일반 언어가 유한 한 것은 아닙니다. 우리 이중 0 언어 단어 무한한 포함 ( 007
, 008
물론 004242
하고 0012345
), 그러나 일정 메모리를 테스트 할 수있다 : 시험에 단어가에 속하는지를, 상기 제 기호는 체크 여부 0
번째 심볼이며 여부 0
. 그럴 경우 수락하십시오. 단어가 3보다 짧거나로 시작하지 00
않는 경우 MI6 코드 이름이 아닙니다.
공식적으로 유한 상태 기계 또는 정규 문법의 구성 은 언어가 규칙적임을 증명하는 데 사용됩니다. if
위 의- 문과 유사 하지만 임의의 긴 단어를 허용합니다. 유한 상태 머신이있는 경우 정규 문법도 있고 그 반대도 마찬가지이므로 둘 중 하나를 표시하는 것으로 충분합니다. 예를 들어 double-0 언어에 대한 유한 상태 머신은 다음과 같습니다.
start state: if input = 0 then goto state 2
start state: if input = 1 then fail
start state: if input = 2 then fail
...
state 2: if input = 0 then accept
state 2: if input != 0 then fail
accept: for any input, accept
동등한 정규 문법은 다음과 같습니다.
start → 0 B
B → 0 accept
accept → 0 accept
accept → 1 accept
...
동등한 정규식 은 다음 과 같습니다 .
00[0-9]*
일부 언어는 규칙적 이지 않습니다 . 예를 들어, 임의의 수의 언어 1
와 동일한 수의 언어 2
(종종 임의의 n에 대해 1 n 2 n 로 기록됨 )는 규칙적이지 않습니다. 일정한 양의 메모리 (= 일정한 수의 상태 ) 는 단어가 언어에 있는지 여부를 결정하기 위해 s 수를 저장합니다 .1
이것은 일반적으로 이론적 인 컴퓨터 과학 과정에서 설명되어야합니다. 운 좋게도 위키피디아는 공식 언어 와 정규 언어를 아주 멋지게 설명합니다 .