언어에 컨텍스트가 없음을 증명하는 방법은 무엇입니까?


26

있습니다 많은 기술 언어임을 증명 하지 문맥 자유는 있지만, 어떻게 언어는 것을 증명 할 것이다 문맥 자유?

이것을 증명하기 위해 어떤 기술이 있습니까? 분명히, 한 가지 방법은 언어에 대해 문맥이없는 문법을 보여주는 것입니다. 주어진 언어에 대해 문맥이없는 문법을 찾는 체계적인 기술이 있습니까?

일반 언어의 경우,이 있는 체계적인 방법으로 일반 문법 / 유한 상태 자동 장치를 도출은 : 예를 들어, 마이 힐 - Nerode 정리 한 방법을 제공합니다. 문맥없는 언어에 해당하는 기술이 있습니까?


여기서의 동기는 주어진 언어에 컨텍스트가 없음을 증명하려고 할 때 종종 도움이되는 기술 목록이 포함 된 참조 질문을 작성하는 것입니다. 여기에는 특별한 경우에 대한 많은 질문이 있기 때문에 이런 종류의 문제에 직면 할 때 사용할 수있는 일반적인 접근 방법이나 일반적인 기술을 문서화 할 수 있다면 좋을 것입니다.


일반적인 메모를 남길 수 있습니다. 현재 사용중인 언어에 대해 문맥이없는 문법을 제공 할 때는 접근이 다소 난해 할 수 있는 정확성 증명 이 필요합니다 .
Raphael

이것을 올바른 참조 질문으로 만들기 위해 문제 덤퍼에게 던질 수 있습니다. 문법과 오토마타를 생각해 보시겠습니까? 감사!
Raphael

자료가 여기로 이동 될 때까지 Rick Decker와 babou 는 중복 된 질문으로 전형적인 문맥이없는 관용구 수집했습니다 .
Raphael

답변:


13

많은 예제에서 작동하는 실용적인 접근법은 (언제나 아는 것은 아님) 언어에서 문자열 의 중첩 구조 를 찾으려고합니다 . "중첩 된 종속성"은 문자열의 다른 부분에서 동시에 생성되어야합니다.

또한 기본 도구 상자가 있습니다 .

  1. 연결 : 언어를 두 개 연속으로 분할 할 수있는 경우이 프로덕션을 사용하십시오.SS1S2

  2. 결합 : 분리 된 부분으로 분할SS1S2

  3. 반복 :SS1Sε

실시 예 1

다음은 중첩에 대한 예입니다 (Raphael에게 감사합니다).

L={bkal(bc)manbok,l,m,n,oN,ko,2l=n,m2}

을 바꿉니다 . 우리는 이제 조건에서 을 떨어 뜨릴 수 있습니다 .n2ln

교체 으로 (혼동? 는 '오'없는 "제로"). 연합 도구를 적용하십시오. 우리는 여기서 작업 합니다. 또한 iff 및 여기서 는 새로운 변수입니다. 를 바꿉니다 .kok>o or k<ook>ok>ok=s+os>0sks+o

L1={bs+oal(bc)ma2lbol,m,o,sN,s>0,m2}

간단한 재 작성.

L1={bbsboalbcbc(bc)m(aa)lbol,m,o,sN}

이제 중첩 구조를보고 문법 작성을 시작합니다.

S1TV , , (참조 : 연결 및 반복)TbUUbUε

VbVbW ( 양쪽에 생성 함 )o b

WaWaaX

XYZ , ,YbcbcZbcZε

실시 예 2

K={akblcml=m+k}

첫 번째 "명백한"재 작성.

K={akbm+kcmm,k0}={akbmbkcmm,k0}

언어학에서는이를 "직렬 직렬 종속성"이라고합니다. 인터리빙 (보통)은 컨텍스트가없는 것을 나타냅니다. 물론 이고 우리는 구원받습니다.k,m,k,mm+k=k+m

K={akbk+mcmm,k0}={akbkbmcmm,k0}

프로덕션 , ,SXYXaXbεYbYcε

마찬가지로K={akblcmm=k+l}={akblclckk,l0}

프로덕션 ,SaScXXbXcε


최종 의견 :이 기술들은 여러분의 언어를 희망적으로 인식 할 수있는 상황에 맞지 않는 문법을 만들어내는 데 도움이됩니다. 문법이 실제로 당신의 언어를 인식하는 데 도움이되도록 올바른 증거 가 필요할 수도 있습니다.


11

사용할 수있는 CFL의 특성은 Chomsky-Schützenberger 정리 입니다.

딕 언어

알파벳 보자 . 우리는 정의 반다이 크 -language 의 컨텍스트 - 프리 그래머에 의해 와 주어진TDT(TT^)TG=({S},TT^,δ,S)δ

SaSa^Sε,aT 입니다.

촘스키-슈첸 베르거 정리

LΣ 는 다음과 같은 경우에만 컨텍스트가 없습니다.

  • 는 알파벳 ,T
  • 일반 언어 및R(TT^)
  • 동질성ψ:(TT^)Σ

그래서

L=ψ(DTR) 입니다.

동질성은 단어 (기호 별 기호)로 확장 된 다음 언어 (단어 별)로 확장됩니다.

고려 . 와L={anbncmn,mN

  • T={[,} (그리고 정식으로 ),T^={],}
  • R=L([])
  • ψ(x)={a,x=[b,x= ]ε,x=c,x= 

정리는 이 문맥이 없음을 의미하며 , 특히L

DTR={[n]nmmn,mN} .

실시 예 2

보여 에 컨텍스트가 없습니다.L={bkal(bc)manbok,l,m,n,oN,ko,2l=n,m2}

여기서 우리는 , , 위한 괄호 와 를 일으키는 를 모델링하는 데 사용되는 괄호가 필요합니다 . 우리는 사용abcbbko

  • T={[,,,<} ,
  • R=L(<+>+[++])L([++]<+>+)
  • ψ(x)={b,x{,,<}a,x=[aa,x= ]bc,x=ε,else

정리를 적용합니다. 를 확인하기 위해 일치하는 기호 (예 : 및 )가 에서 똑같이 자주 발생해야 한다는 사실 이상을 필요로하지 않습니다 . 을 정의한 정규 표현식에이 제약 조건을 추가 하면L=ψ(DTR)[]wDTR

DTR={<p>po[lmm]lop1,o0,l0,m2} {}

그리고 그와 함께

ψ(DTR)={bp+oal(bc)ma2lbop1,o0,l0,m2} {}={bkal(bc)manbok,l,m,n,oN,k>o,2l=n,m2} {}=L.

문법과 오토마타

우리가 결국 오토 마톤이나 문법을 원한다면, 우리보다 더 많은 일이 있습니다.

  • 오토 마톤을 향하여 D_T의 와 의 NFA를 구성하십시오 . 전자는 표준이며 언어가 적절한 표현으로 제공되는 경우 후자를위한 알고리즘이 있습니다 ( 여기 참조 ). 교차는 둘 다 표준 구성이며 는 모든 전환에 개별적으로 적용될 수 있습니다.DTRψ

  • 문법에 대한 빌드 한쪽으로 (다시, 표준이어야 함)에 대한 하나 가지고 와 그 교차을 . 그런 다음 를 규칙 세트에 적용 하십시오 (기호의 기호).RDTψ

논란의 여지가 있지만, 이것은 알고리즘이기 때문에 쉽습니다. 복잡성은 적합한 , 및 를 찾는 데 있습니다 . 이 접근 방식이 PDA / 문법을 직접 구성하는 것보다 (종종) 간단한 지 잘 모르겠지만 현재 사용중인 언어의 중요한 기능에 집중할 수 있습니다. 직접 해보십시오!TRψ


주어진 언어에 컨텍스트가 없는지 여부를 결정할 수 없습니다.
reinierpost
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.