전 컴퓨터 언어 테스트를 공부 하고 있는데 머리를 감싸는 데 문제가 있다는 생각이 하나 있습니다.
정규 문법 이 더 간단하고 모호함을 포함 할 수 없지만 프로그래밍 언어에 필요한 많은 작업을 수행 할 수 없다는 것을 이해했습니다 . 또한 문맥없는 문법 은 모호성을 허용하지만 프로그래밍 언어 (회문과 같은)에 필요한 몇 가지 사항을 허용 한다는 것을 이해했습니다 .
내가 문제를 겪고있는 것은 일반 문법 비 터미널 이 터미널 또는 비 터미널 다음에 터미널에 매핑 될 수 있거나 컨텍스트없는 비 터미널이 터미널과 비 터미널의 모든 조합에 매핑 된다는 것을 알고 위의 모든 것을 파생시킬 수있는 방법을 이해하는 것 입니다. .
누군가가이 모든 것을 통합하도록 도울 수 있습니까?
답변
일반 문법은 오른쪽 또는 왼쪽 선형이지만 문맥 자유 문법은 기본적으로 터미널과 비 터미널의 조합입니다. 따라서 정규 문법이 문맥없는 문법의 하위 집합임을 알 수 있습니다.
예를 들어 회 문의 경우 형식은 다음과 같습니다.
S->ABA
A->something
B->something
회문은 오른쪽 또는 왼쪽 선형이어야하고 양쪽에 비 터미널을 가질 수 없기 때문에 정규 문법으로 표현할 수 없다는 것을 분명히 알 수 있습니다.
정규 문법은 모호하지 않기 때문에 주어진 비 터미널에 대해 단 하나의 생산 규칙이있는 반면 문맥없는 문법의 경우에는 둘 이상이있을 수 있습니다.
답변
여러분이 생각하고 싶은 것은 다양한 펌핑 기본형이라고 생각합니다. 유한 오토마타가 정규 언어를 인식 할 수 있습니다. 컨텍스트 프리 언어에는 스택이 필요하고 컨텍스트 감지 언어에는 두 개의 스택이 필요합니다 (전체 튜링 머신이 필요하다고 말하는 것과 동일).
그래서 우리가 정규 언어 에 대한 펌핑 기본형에 대해 생각한다면 , 본질적으로 모든 정규 언어는 x , y , z의 세 부분으로 나눌 수 있으며 , 여기서 언어의 모든 인스턴스는 xy * z에 있습니다. (여기서 *는 Kleene 반복, 즉 0 개 이상의 y 복사본입니다 .) 기본적으로 확장 할 수있는 하나의 “비 터미널”이 있습니다.
이제 문맥없는 언어는 어떻습니까? 언어 의 문자열을 다섯 부분 인 uvxyz로 나누고 언어의 모든 인스턴스가 i ≥ 0 인 경우 uv i xy i z 에있는 컨텍스트없는 언어에 대한 유사한 펌핑 기본형 이 있습니다. 이제 두 개의 “비 터미널” 이 있습니다. ” 같은 숫자를 가지고 있는 한 복제하거나 펌핑 할 수 있습니다 .
답변
일반 문법과 문맥 자유 문법의 차이 :
(N, Σ, P, S) : 터미널, 비 터미널, 프로덕션, 시작 상태 터미널 기호
● 형식 문법으로 정의 된 언어의 기본 기호
● abc
비 말단 기호 (또는 구문 변수)
● 생산 규칙에 따라 터미널 기호 그룹으로 대체
● ABC
일반 문법 : 오른쪽 또는 왼쪽 일반 문법 오른쪽 일반 문법, 모든 규칙은 형식을 따릅니다.
- B → a 여기서 B는 N의 비 터미널이고 a는 Σ의 터미널입니다.
- B → aC 여기서 B와 C는 N에 있고 a는 Σ에 있습니다.
- B → ε 여기서 B는 N이고 ε은 빈 문자열, 즉 길이가 0 인 문자열을 나타냅니다.
정규 문법을 남겼고, 모든 규칙은 형식을 따릅니다.
- A → a 여기서 A는 N에서 비 터미널이고 a는 Σ에서 터미널입니다.
- A → Ba 여기서 A와 B는 N에 있고 a는 Σ에 있습니다.
- A → ε 여기서 A는 N이고 ε은 빈 문자열입니다.
문맥 자유 문법 (CFG)
○ 모든 생산 규칙이 V → w 형식 인 공식 문법
○ V는 단일 비 터미널 기호입니다.
○ w는 터미널 및 / 또는 비 터미널 문자열입니다 (w는 비어있을 수 있음).
답변
정규 문법 :- 다음과 같은 생산을 포함하는 문법은 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은 본질적으로 모호하지 않습니다.
답변
정규식
- 어휘 분석의 기초
- 일반 언어를 나타냅니다.
문맥 자유 문법
- 파싱의 기초
- 언어 구조 표현
답변
모든 생산 규칙이 A (즉, 규칙의 왼쪽은 단일 변수 만 될 수 있고 오른쪽은 제한되지 않고 임의의 터미널 및 변수 시퀀스가 될 수 있음)의 형식이면 문법은 문맥이 없습니다. 문법을 4 튜플로 정의 할 수 있습니다. 여기서 V는 유한 집합 (변수), _는 유한 집합 (터미널), S는 시작 변수, R은 각각 매핑 인 유한 한 규칙 집합입니다. V
정규 문법은 오른쪽 또는 왼쪽 선형이지만 문맥 자유 문법은 기본적으로 터미널과 비 터미널의 조합입니다. 따라서 정규 문법은 문맥없는 문법의 하위 집합이라고 말할 수 있습니다. 이러한 속성 뒤에는 컨텍스트 자유 언어 세트에 정규 언어 세트도 포함되어 있다고 말할 수 있습니다.
답변
기본적으로 정규 문법은 문맥 자유 문법의 하위 집합이지만 모든 문맥 자유 문법이 정규 문법이라고 말할 수는 없습니다. 주로 문맥 자유 문법은 모호하고 일반 문법은 모호 할 수 있습니다.