정규 문법과 문맥 자유 문법


96

컴퓨터 언어 테스트를 공부 하고 있는데 머리를 감싸는 데 문제가 있다는 생각이 하나 있습니다.

정규 문법 이 더 간단하고 모호함을 포함 할 수 없지만 프로그래밍 언어에 필요한 많은 작업을 수행 할 수 없다는 것을 이해했습니다 . 또한 문맥없는 문법 은 모호성을 허용하지만 프로그래밍 언어 (회문과 같은)에 필요한 몇 가지 사항을 허용 한다는 것을 이해했습니다 .

내가 문제를 겪고있는 것은 일반 문법 비 터미널 이 터미널 또는 비 터미널 다음에 터미널에 매핑 될 수 있거나 컨텍스트없는 비 터미널이 터미널과 비 터미널의 모든 조합에 매핑 된다는 것을 알고 위의 모든 것을 파생시킬 수있는 방법을 이해하는 것 입니다. .

누군가가이 모든 것을 통합하도록 도울 수 있습니까?

답변:


70

일반 문법은 오른쪽 또는 왼쪽 선형이지만 문맥 자유 문법은 기본적으로 터미널과 비 터미널의 조합입니다. 따라서 정규 문법이 문맥없는 문법의 하위 집합임을 알 수 있습니다.

예를 들어 회 문의 경우 형식은 다음과 같습니다.

S->ABA
A->something
B->something

회문은 오른쪽 또는 왼쪽 선형이어야하고 양쪽에 비 터미널을 가질 수 없기 때문에 정규 문법으로 표현할 수 없다는 것을 분명히 알 수 있습니다.

정규 문법은 모호하지 않기 때문에 주어진 비 터미널에 대해 단 하나의 생산 규칙이있는 반면 문맥없는 문법의 경우에는 둘 이상이있을 수 있습니다.


13
첫째 : 정규 문법은 모호 할 수 있습니다 (Kai Kuchenbecker의 예 : S-> aA | aB, B-> a, A-> a). 유일한 것은 구문 트리의 노드를 배치 할 수있는 방법이 한 가지뿐이라는 것입니다 (예를 들어 정규 문법이 사용되는 경우 연관성 모호성이 존재하지 않음). 두 번째 : 비 터미널 (A-> a, A-> aA;
위키피디아

1
모호성은 하나 이상의 파생 경로에서 문법에서 문장이 파생 될 때 발생합니다. 비 터미널에 대해 둘 이상의 생산 규칙이 있다고해서 문법이 모호해지지는 않습니다
Sujoy

11
이 예는 실제로 잘못되었습니다. 우리가 상상하는 경우 전체 규칙이 될 수 있습니다 A-> a | cB->b다음이 문법이 아닌 회문 수 있습니다. 예를 들어 다음을 생성 할 수 있습니다 S->ABA->aBA->abA->abc.. 문제는 첫 번째 규칙에서 두 개의 변수를 생성하는 것이 아니라 두 개의 터미널을 생성하기를 원한다는 것입니다. 회문을 허용하는 문법의 가능성은 다음과 같습니다.S -> aSa | bSb | a | b
gdiazc 2014 년

일반 문법으로 표현할 있는 회문이 있습니다 : 단일 문자로 구성된 회문입니다. 예를 들어, S -> aSa | ea(aa)*a모두는 일반 언어를 설명합니다. 이것은 CFG가 왼쪽 또는 오른쪽 선형성을 위반하더라도 정규 언어를 설명 할 수 있음을 보여줍니다. 분명히, 이것은 그리 분명하지 않은 회문입니다 ..
Martijn

생각해 보면이 대답은 사실 틀 렸습니다. "문맥없는"문법은 기본적으로 터미널과 비 터미널의 모든 조합입니다. "그러나 tu ^ nvw ^ mxy ^ kz는 터미널과 비 터미널의 조합이지만 컨텍스트가없는 것은 아닙니다.
Charlie Martin

58

여러분이 생각하고 싶은 것은 다양한 펌핑 기본형이라고 생각합니다. 유한 오토마타가 정규 언어를 인식 할 수 있습니다. 컨텍스트 프리 언어에는 스택이 필요하고 컨텍스트 감지 언어에는 두 개의 스택이 필요합니다 (전체 튜링 머신이 필요하다고 말하는 것과 동일).

그래서 우리가 정규 언어 에 대한 펌핑 기본형에 대해 생각한다면 , 본질적으로 모든 정규 언어는 x , y , z의 세 부분으로 나눌 수 있으며 , 여기서 언어의 모든 인스턴스는 xy * z에 있습니다. (여기서 *는 Kleene 반복, 즉 0 개 이상의 y 복사본입니다 .) 기본적으로 확장 할 수있는 하나의 "비 터미널"이 있습니다.

이제 문맥없는 언어는 어떻습니까? 언어 의 문자열을 다섯 부분 인 uvxyz로 나누고 언어의 모든 인스턴스가 i ≥ 0 인 경우 uv i xy i z 에있는 컨텍스트없는 언어에 대한 유사한 펌핑 기본형 이 있습니다. 이제 두 개의 "비 터미널" 이 있습니다. " 같은 숫자를 가지고 있는 한 복제하거나 펌핑 할 수 있습니다 .


10
상황에 맞는 언어에는 전체 튜링 머신이 필요하지 않습니다. 선형 경계 오토 마톤이면 충분합니다. 이것은 테이프가 유한 한 튜링 머신입니다. 크기는 입력 문자열의 선형 함수에 의해 제한됩니다.
Dave Clarke

16

일반 문법과 문맥 자유 문법의 차이 : (N, Σ, P, S) : 터미널, 비 터미널, 프로덕션, 시작 상태 터미널 기호

● 형식 문법으로 정의 된 언어의 기본 기호

● abc

비 말단 기호 (또는 구문 변수)

● 생산 규칙에 따라 터미널 기호 그룹으로 대체

● ABC

일반 문법 : 오른쪽 또는 왼쪽 일반 문법 오른쪽 일반 문법, 모든 규칙은 형식을 따릅니다.

  1. B → a 여기서 B는 N의 비 터미널이고 a는 Σ의 터미널입니다.
  2. B → aC 여기서 B와 C는 N에 있고 a는 Σ에 있습니다.
  3. B → ε 여기서 B는 N이고 ε은 빈 문자열, 즉 길이가 0 인 문자열을 나타냅니다.

정규 문법을 남겼고, 모든 규칙은 형식을 따릅니다.

  1. A → a 여기서 A는 N에서 비 터미널이고 a는 Σ에서 터미널입니다.
  2. A → Ba 여기서 A와 B는 N에 있고 a는 Σ에 있습니다.
  3. A → ε 여기서 A는 N이고 ε은 빈 문자열입니다.

문맥 자유 문법 (CFG)

○ 모든 생산 규칙이 V → w 형식 인 공식 문법

○ V는 단일 비 터미널 기호입니다.

○ w는 터미널 및 / 또는 비 터미널 문자열입니다 (w는 비어있을 수 있음).


5

정규 문법 :- 다음과 같은 생산을 포함하는 문법은 RG입니다 :

V->TV or VT
V->T

여기서 V = 변수, T = 터미널

RG는 Left Linear Grammar 또는 Right Liner Grammar 일 수 있지만 Middle linear Grammar는 아닙니다.

우리가 알고 있듯이 모든 RG는 선형 문법이지만 왼쪽 선형 또는 오른쪽 선형 문법 만 RG입니다.

정규 문법은 모호 할 수 있습니다.

S->aA|aB
A->a
B->a

모호한 문법 :- 문자열 x의 경우 둘 이상의 LMD 또는 RMD 이상 또는 둘 이상의 구문 분석 트리 또는 하나의 LMD 및 하나의 RMD가 있지만 둘 다 다른 구문 분석 트리를 생성합니다.

                S                   S

              /   \               /   \
             a     A             a     B
                    \                   \
                     a                   a

이 문법은 두 개의 구문 분석 트리 때문에 모호한 문법입니다.

CFG :- 생산이 다음과 같은 형식이면 CFG라고하는 문법 :

   V->@   where @ belongs to (V+T)*

DCFL : -우리가 알고 있듯이 모든 DCFL은 LL (1) 문법이고 모든 LL (1)은 LR (1)이므로 절대 모호하지 않습니다. 따라서 DCFG는 절대 모호하지 않습니다.

우리는 또한 모든 RL이 DCFL이라는 것을 알고 있으므로 RL이 모호하지 않습니다. RG는 모호 할 수 있지만 RL은 모호하지 않습니다.

CFL : CFl 모호하지 않을 수도 있습니다.

참고 : RL은 본질적으로 모호하지 않습니다.


4

정규식

  • 어휘 분석의 기초
  • 일반 언어를 나타냅니다.

문맥 자유 문법

  • 파싱의 기초
  • 언어 구조 표현

여기에 이미지 설명 입력


아니요, 간단한 설명입니다. 다시 읽고 이미지를 확인하십시오.
Ahmed Salem

3

모든 생산 규칙이 A (즉, 규칙의 왼쪽은 단일 변수 만 될 수 있고 오른쪽은 제한되지 않고 임의의 터미널 및 변수 시퀀스가 ​​될 수 있음)의 형식이면 문법은 문맥이 없습니다. 문법을 4 튜플로 정의 할 수 있습니다. 여기서 V는 유한 집합 (변수), _는 유한 집합 (터미널), S는 시작 변수, R은 각각 매핑 인 유한 한 규칙 집합입니다. V
정규 문법은 오른쪽 또는 왼쪽 선형이지만 문맥 자유 문법은 기본적으로 터미널과 비 터미널의 조합입니다. 따라서 정규 문법은 문맥없는 문법의 하위 집합이라고 말할 수 있습니다. 이러한 속성 뒤에는 컨텍스트 자유 언어 세트에 정규 언어 세트도 포함되어 있다고 말할 수 있습니다.


-1

기본적으로 정규 문법은 문맥 자유 문법의 하위 집합이지만 모든 문맥 자유 문법이 정규 문법이라고 말할 수는 없습니다. 주로 문맥 자유 문법은 모호하고 일반 문법은 모호 할 수 있습니다.


-4

정규 문법은 왼쪽 선형 또는 오른쪽 선형이기 때문에 절대 모호하지 않으므로 정규 문법에 대해 두 가지 결정 트리를 만들 수 없으므로 항상 모호하지 않습니다.


4
@dinesh 정규 문법은 모호 할 수 있습니다. 두 개의 다른 구문 트리가 있고 구문 트리에 레이블이 지정된 경우 문법이 모호하다는 점을 상기하십시오. 따라서 동형 나무는 다른 나무입니다. 즉 S-> aA | aB, B-> a, A-> a는 'aa'라는 단어에 대해 동형이지만 다른 구문 트리가 두 개 존재하기 때문에 모호합니다.
Kai Kuchenbecker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.