많은 예제에서 작동하는 실용적인 접근법은 (언제나 아는 것은 아님) 언어에서 문자열 의 중첩 구조 를 찾으려고합니다 . "중첩 된 종속성"은 문자열의 다른 부분에서 동시에 생성되어야합니다.
또한 기본 도구 상자가 있습니다 .
연결 : 언어를 두 개 연속으로 분할 할 수있는 경우이 프로덕션을 사용하십시오.S→S1S2
결합 : 분리 된 부분으로 분할S→S1∣S2
반복 :S→S1S∣ε
실시 예 1
다음은 중첩에 대한 예입니다 (Raphael에게 감사합니다).
L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
을 바꿉니다 . 우리는 이제 조건에서 을 떨어 뜨릴 수 있습니다 .n2ln
교체 으로 (혼동? 는 '오'없는 "제로"). 연합 도구를 적용하십시오. 우리는 여기서 작업 합니다. 또한 iff 및 여기서 는 새로운 변수입니다. 를 바꿉니다 .k≠ok>o or k<ook>ok>ok=s+os>0sks+o
L1={bs+oal(bc)ma2lbo∣l,m,o,s∈N,s>0,m≥2}
간단한 재 작성.
L1={bbsboalbcbc(bc)m(aa)lbo∣l,m,o,s∈N}
이제 중첩 구조를보고 문법 작성을 시작합니다.
S1→TV , , (참조 : 연결 및 반복)T→bUU→bU∣ε
V→bVb∣W ( 양쪽에 생성 함 )o b
W→aWaa∣X
X→YZ , ,Y→bcbcZ→bcZ∣ε
실시 예 2
K={akblcm∣l=m+k}
첫 번째 "명백한"재 작성.
K={akbm+kcm∣m,k≥0}={akbmbkcm∣m,k≥0}
언어학에서는이를 "직렬 직렬 종속성"이라고합니다. 인터리빙 (보통)은 컨텍스트가없는 것을 나타냅니다. 물론 이고 우리는 구원받습니다.k,m,k,mm+k=k+m
K={akbk+mcm∣m,k≥0}={akbkbmcm∣m,k≥0}
프로덕션 , ,S→XYX→aXb∣εY→bYc∣ε
마찬가지로K′={akblcm∣m=k+l}={akblclck∣k,l≥0}
프로덕션 ,S→aSc∣XX→bXc∣ε
최종 의견 :이 기술들은 여러분의 언어를 희망적으로 인식 할 수있는 상황에 맞지 않는 문법을 만들어내는 데 도움이됩니다. 문법이 실제로 당신의 언어를 인식하는 데 도움이되도록 올바른 증거 가 필요할 수도 있습니다.