자신과 연결된 단어의 언어에 대한 상황에 맞는 문법


9

다음 언어를 설명하는 상황에 맞는 문법을 찾고 있습니다. L={www{a,b},|w|1} .

과 같은 규칙이 없다는 사실에 문제가 있습니다.Xε 은 허용되지 않으므로 단어의 "중간"을 나타내는 비 터미널을 배치 할 수 없다는 있습니다. 문제에 대한 트릭이 있습니까?


1
지루한 답변 : LBA를 공식화하고 LBA와 상황에 맞는 문법이 똑같이 강력하다는 것을 증명하는 데 사용되는 시뮬레이션을 적용하십시오.
라파엘

답변:


6

실제로 특정 위치에 정보를 추가 할 수있는 간단한 방법이 있습니다. 위치에 인접한 문자를 바꾸고 정보와 원래 문자로 표시하면됩니다.

귀하의 예에서, 비 터미널을 가지고 M중간에 대해서는 삭제할 수 없으므로 일반 문자로 계산됩니다. 따라서 우리는 두 개의 사본이 있습니다MaMb대체 된 글자를 나타냅니다. 도출이 끝날 무렵 마커는 다음과 같은 간단한 제작 방식으로 문자 내용으로 대체되어야합니다.Maa.

대부분의 경우 Maa파생 프로세스가 끝날 때 수행해야합니다. 일부 구성에서는 "시간"을 지정할 필요가 없습니다.M너무 빨리 사라지면 파생물이 올바른 위치를 찾을 수 없으며 프로세스가 성공적으로 중지되지 않습니다. 다른 경우에는 일종의 제어가 필요합니다. 이것은 때때로 문자를 따라 움직이는 신호로 비 터미널을 도입하여 수행됩니다. 다시 말하지만,이 신호는 터미널을 운반해야합니다. 그렇지 않으면 같은 문제가 발생합니다.

소위 단조로운 문법 으로 정보를 쉽게 이동할 수 있습니다. (αβ|α|β|) 같은 규칙을 사용하여 엑스엑스로 볼 수 있습니다 엑스 뛰어 넘다 . 상황에 맞는 문법을 이해하려면 이것을 세 단계로 나눠야합니다.엑스엑스엑스,엑스엑스엑스,엑스엑스. 각 프로덕션에서 하나의 문자가 적절한 컨텍스트에서 변경됩니다. 이 프로세스가 파생의 다른 부분과 상호 작용하지 않는 것을 보는 것은 상당히 상상력이 필요합니다. 예를 들어 마지막 단계에서 먼저 다른 파생 단계에 관여합니까?

사용 가능한 위치보다 더 많은 정보가있는 경우 매우 짧은 단어에서는 작동하지 않을 수 있습니다. 이에 대한 가장 간단한 해결책은 구성에서 짧은 문자열을 무시하고 별도로 생성하는 것입니다.


비 터미널을 끝까지 재 배열하기 전에 Ma → a가 사용되지 않도록 특정 순서로 생산 된 제품을 볼 필요가 없습니까? 아니면 뭔가 빠졌습니까?
MrBolton

나는 대답에 메모를 추가했습니다. 그러한 솔루션을 너무 빨리 적용하는 일부 솔루션에서는 성공적으로 완료 할 수없는 문장 양식이 생성됩니다. 다른 경우에는 프로덕션을 신중하게 동기화해야합니다. 상식과 시행 착오의 문제.
Hendrik Jan

1

짧은 기본 답변 : 언어를 받아들이고 상황에 맞는 문법과 LBA가 동일한 언어 집합을 정의하는 데 사용되는 시뮬레이션을 사용하는 LBA가 제공됩니다. 그러나 그것은 물론 당신이 추구하는 것이 아닙니다.

이 특정한 경우에 대해 직각 형 문법을 사용하는 것을 생각해보십시오. Σ왼쪽과 오른쪽에 각각 하나씩 두 번. 두 문법이 모두 "동기화"되도록해야합니다.

이것은 제어 토큰을 교환하여 수행 할 수 있습니다. 즉, 왼쪽 문법은 규칙을 선택하고 피팅 제어 토큰을 생성하여 규칙을 오른쪽 문법으로 전달합니다. 오른쪽 문법은 제어 토큰을보고 피팅 규칙을 실행합니다. 이런 식으로 양방향 통신을 구현할 수도 있지만 여기서는 필요하지 않습니다.

상황에 맞는 문법에는 한 가지 문제가 있습니다. 비 터미널은 삭제할 수 없습니다 (단, Sε빈 단어가 언어로되어있는 경우). 그러므로 우리는 필요한만큼 비 터미널 만 만들어야합니다. 중복 될 수있는 것은 없습니다.

당신이 필요로가는 모든 비 터미널 생성 :이를 달성하는 방법 중 하나는 LBA에 대한 특정 증거와 동일한 트릭을 사용하는 것입니다 처음 은 "테이프"를 준비 즉,. 나중에 해당 테이프에서 "이동"하십시오. "끝에"만, 모든 비 터미널을 터미널로 교체하십시오.

그래서 보자 G=(N,Σ,δ,S)Σ={a,b} (구조는 더 큰 알파벳으로 쉽게 확장됩니다) 및 , δ 다음 규칙에 의해 주어진다.

에스엑스^에스'엑스아르 자형ε에스'엑스에스'엑스아르 자형엑스엑스^아르 자형

"테이프"를 생성하기위한 규칙입니다. 모자는 "머리 위치"와 색인을 나타냅니다,아르 자형비 터미널에 속하는 단어의 절반을 나타냅니다. 따라서 짧은 규칙은 아래의 일부 규칙을 안전하게하기 위해 생성됩니다. 이제 왼쪽 부분에서 하나의 심볼을 파생시키는 규칙이 필요합니다.

엑스^엑스엑스γ엑스^γ엑스^엑스α엑스γ엑스αγ

모든 (α,γ)Σ2. 상단 인덱스를 사용하여 생성 된 심볼을 오른쪽으로 이동시키는 방법에 유의하십시오.엑스엑스"최종"비 터미널은 제어 토큰을 이동하고 나중에 터미널을 파생시키는 데만 사용됩니다. 또한 두 번째 규칙은 오른쪽 절반의 마지막 기호에 사용됩니다.

캐리를 오른쪽으로 옮기려면 남은 양을지나 쳐야합니다엑스 이미 생성 엑스α:

엑스^γ엑스엑스^엑스γ엑스^γ엑스α엑스^엑스αγ엑스γ엑스엑스엑스γ엑스γ엑스α엑스엑스αγ엑스αγ엑스β엑스α엑스βγ

모든 (α,β,γ)Σ. 이제 캐리가 올바른 제어 토큰에 도달하면 왼쪽에 사용 된 규칙을 모방해야합니다.

엑스γ엑스^아르 자형엑스엑스^아르 자형γ엑스αγ엑스^아르 자형엑스α엑스^아르 자형γ엑스^아르 자형γ엑스아르 자형엑스γ엑스^아르 자형엑스^아르 자형γ엑스γ

모든 (α,γ)Σ2. 첫 번째 규칙은 오른쪽 절반의 첫 번째 기호에 사용되고 마지막 규칙은 마지막 기호에만 사용할 수 있으며 그렇지 않으면 파생이 종료되지 않습니다. 이제 종료 규칙 만 있으면됩니다

엑스αα

모든 αΣ그리고 우리는 끝났습니다. 이 규칙들도 (왼쪽) 모든 것이 끝난 후에 만 ​​적용 할 수 있으며, 그렇지 않으면 파생은 종료되지 않습니다.

이 문법은 모호합니다. 할 수있을뿐만 아니라엑스αα(안전하게) 언제라도 왼쪽 "헤드"의 왼쪽 어디든지 적용 할 수 있지만 동시에 여러 개의 캐리가 진행될 수도 있습니다. 그들은 서로를 추월 할 수 없기 때문에 올바른 순서가 유지됩니다. 많은 규칙 이 왼쪽의 기호를 모두 변경 하므로

위의 문법은 상황 에 맞지 않습니다 . 상황에 맞는 문법에는 사용할 수 없습니다. 다행히 모든 규칙을 시뮬레이션 할 수 있습니다아르 자형 형태의



으로

와이아르 자형와이아르 자형엑스아르 자형와이아르 자형엑스아르 자형와이아르 자형엑스아르 자형엑스아르 자형

우리는 훌륭하고 더 작은 문법으로 작업 할 수 있습니다. 여러 시뮬레이션 사이의 간섭이 아프지 않다는 것을 보여주는 것은 연습으로 남아 있습니다.

이것을 확장하는 방법을 보십니까 케이={케이Σ}? 그것은 또한 작동합니까=나는1케이? 당신은 같은 구성을 사용할 수 있습니다케이 정기적으로 ?


0

상황에 맞는 문법이 어떻게 생겼는지 모르겠지만 기호를 사용하여 문제를 피할 수 있습니다. 엑스 다음과 같이.

당신은 당신의 연결된 단어를 알고 최소한 길이 여야합니다 ||1. 따라서 간단히 "인코딩"할 수 있습니다.ε다음과 같은 규칙에 따라 문법 규칙 :

엑스,  엑스,  엑스,  엑스

그래도 전반적인 솔루션을 볼 수는 없지만 문법 규칙의 왼쪽 부분이 잠재적으로 길어질 것 같습니다. 어떻게 든 규칙에.


그러나 @ hendrik-jan의 접근 방식을 사용하면 두 가지 규칙이 절약됩니다.
Rmn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.