오토마타에서 정규 표현식과 문법의 차이점


12

나는 오토마타를 처음 접했고 어제 정규 표현식에 대해 간략하게 소개 받았습니다. 정규식을 정의하는 다양한 규칙을 읽었습니다. 그러나 나는 정규 표현과 언어의 문법을 구별 할 수 없습니다 (정규 표현에 대한 문법을 ​​배우지 못했습니다).

문법은 언어로 유효한 문자열을 생성하는 데 도움이된다는 것을 이해하지만 이것이 정규 표현식 상태를 정의하는 규칙입니다. 차이점은 어디에 있습니까? 나는 교수에게 물었고, 정규 표현식은 언어에서 가장 기본적인 문자열이며 문법은 정규 표현식보다 순서가 높은 모든 언어의 규칙 집합이라고 말했다. 누군가 좀 더 자세한 정보를 제공 할 수 있습니까?

답변:


22

정규 표현식, 정규 문법 및 유한 오토마타는 같은 것에 대해 단순히 세 가지 다른 형식입니다. 이들 중 하나를 다른 것으로 변환하는 알고리즘이 있습니다.

우리가 세 가지를 모두 가지고있는 기본적인 이유는 Kleene (이 결과 또는 그 일부를 Kleene의 정리라고 함)에서 입증 한 등가의 첫 번째 세트 (여러 가지 다른 형식주의도 있음)와 함께 독립적으로 만들어 졌기 때문입니다.

따라서 이러한 맥락에서 모델을 실행하려는 방법에 따라 모두 일반 언어의 문자열을 인식하거나 생성하며 수학적으로 차이가 없습니다.

물론 형식의 세부 사항으로 인해 특정 작업에 한 모델이 다른 모델보다 사용하기가 더 쉬운 경우가 있습니다. 또한 인간의 머리에서 작동하는 방식은 컴퓨터와 같은 약간 다른 유한 오토마타 "느낌", 더 작은 하위 문자열로 문자열을 구성하는 것과 같은 정규식 "느낌"및보다 전통적인 문법과 같은 규칙적인 문법 "느낌" 언어로 된 문장의 파생 또는 분류 (당연히 역사를 볼 때).

두 가지를 비교하기 위해 두 가지를 정의 해 보겠습니다.

정규식

따라서 정규식은 다음과 같이 재귀 적으로 정의됩니다.

  1. 는 정규식입니다
  2. 은 정규식입니다ε
  3. 모든위한 정규 표현식입니다ΣaaΣ
  4. 경우 와 B는 정규 표현식은있다 AB
    • 는 정규식입니다 (연결).AB
    • 는 정규식입니다 (교대)AB
    • 정규 표현식입니다 (149) 클린의 별 (Kleene star)A

일부 의미론 (예 : 연산자가 문자열을 얻기 위해 해석하는 방법)과 함께 일반 언어에서 문자열을 생성하는 방법을 얻습니다.

정규 문법

(N,Σ,P,SN)NΣSPΣP

올바른 선형 문법

BCaε

  1. Ba
  2. BaC
  3. Bε

왼쪽 선형 문법

BCa

숙고 할 것

따라서 이러한 정의를보고 함께 사용하면 정규식이 규칙과 일치하거나 문자열을 한 번에 조금씩 처리하는 방법처럼 보일 수 있습니다.

S

그러나 이것들은 실제로 동일한 근본적인 일을하고 있으며, 함수의 은유를 보는 방법은 실제로 당신에게 달려 있습니다.


나는 문법 이 언어에서 문자열을 생성 한다는 사실에 더 중점을 두었지만 , 정규 표현식은 (당신이 말했듯이) 언어의 모든 문자열과 일치하는 (또는 "테스트") 더 일치하는 패턴 에 가깝습니다.
Ran G.

@RanG., 그것은 실제로 그것을 생각하는 일반적인 방법이지만, 둘 다 뒤집을 수 있습니다. 상향식 구문 분석은 문법에 대해 문자열을 테스트하며 정규식을 언어에 대한 간단한 설명으로 사용할 수 있습니다.
Luke Mathieson

NSR

NRRP

@simpleBob, 아, 물론 오타입니다. 감사!
Luke Mathieson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.