답변:
실제로 특정 위치에 정보를 추가 할 수있는 간단한 방법이 있습니다. 위치에 인접한 문자를 바꾸고 정보와 원래 문자로 표시하면됩니다.
귀하의 예에서, 비 터미널을 가지고 중간에 대해서는 삭제할 수 없으므로 일반 문자로 계산됩니다. 따라서 우리는 두 개의 사본이 있습니다 과 대체 된 글자를 나타냅니다. 도출이 끝날 무렵 마커는 다음과 같은 간단한 제작 방식으로 문자 내용으로 대체되어야합니다..
대부분의 경우 파생 프로세스가 끝날 때 수행해야합니다. 일부 구성에서는 "시간"을 지정할 필요가 없습니다.너무 빨리 사라지면 파생물이 올바른 위치를 찾을 수 없으며 프로세스가 성공적으로 중지되지 않습니다. 다른 경우에는 일종의 제어가 필요합니다. 이것은 때때로 문자를 따라 움직이는 신호로 비 터미널을 도입하여 수행됩니다. 다시 말하지만,이 신호는 터미널을 운반해야합니다. 그렇지 않으면 같은 문제가 발생합니다.
소위 단조로운 문법 으로 정보를 쉽게 이동할 수 있습니다. ( 와 ) 같은 규칙을 사용하여 로 볼 수 있습니다 뛰어 넘다 . 상황에 맞는 문법을 이해하려면 이것을 세 단계로 나눠야합니다.. 각 프로덕션에서 하나의 문자가 적절한 컨텍스트에서 변경됩니다. 이 프로세스가 파생의 다른 부분과 상호 작용하지 않는 것을 보는 것은 상당히 상상력이 필요합니다. 예를 들어 마지막 단계에서 먼저 다른 파생 단계에 관여합니까?
사용 가능한 위치보다 더 많은 정보가있는 경우 매우 짧은 단어에서는 작동하지 않을 수 있습니다. 이에 대한 가장 간단한 해결책은 구성에서 짧은 문자열을 무시하고 별도로 생성하는 것입니다.
짧은 기본 답변 : 언어를 받아들이고 상황에 맞는 문법과 LBA가 동일한 언어 집합을 정의하는 데 사용되는 시뮬레이션을 사용하는 LBA가 제공됩니다. 그러나 그것은 물론 당신이 추구하는 것이 아닙니다.
이 특정한 경우에 대해 직각 형 문법을 사용하는 것을 생각해보십시오. 왼쪽과 오른쪽에 각각 하나씩 두 번. 두 문법이 모두 "동기화"되도록해야합니다.
이것은 제어 토큰을 교환하여 수행 할 수 있습니다. 즉, 왼쪽 문법은 규칙을 선택하고 피팅 제어 토큰을 생성하여 규칙을 오른쪽 문법으로 전달합니다. 오른쪽 문법은 제어 토큰을보고 피팅 규칙을 실행합니다. 이런 식으로 양방향 통신을 구현할 수도 있지만 여기서는 필요하지 않습니다.
상황에 맞는 문법에는 한 가지 문제가 있습니다. 비 터미널은 삭제할 수 없습니다 (단, 빈 단어가 언어로되어있는 경우). 그러므로 우리는 필요한만큼 비 터미널 만 만들어야합니다. 중복 될 수있는 것은 없습니다.
당신이 필요로가는 모든 비 터미널 생성 :이를 달성하는 방법 중 하나는 LBA에 대한 특정 증거와 동일한 트릭을 사용하는 것입니다 처음 은 "테이프"를 준비 즉,. 나중에 해당 테이프에서 "이동"하십시오. "끝에"만, 모든 비 터미널을 터미널로 교체하십시오.
그래서 보자 와 (구조는 더 큰 알파벳으로 쉽게 확장됩니다) 및 , 다음 규칙에 의해 주어진다.
"테이프"를 생성하기위한 규칙입니다. 모자는 "머리 위치"와 색인을 나타냅니다비 터미널에 속하는 단어의 절반을 나타냅니다. 따라서 짧은 규칙은 아래의 일부 규칙을 안전하게하기 위해 생성됩니다. 이제 왼쪽 부분에서 하나의 심볼을 파생시키는 규칙이 필요합니다.
모든 . 상단 인덱스를 사용하여 생성 된 심볼을 오른쪽으로 이동시키는 방법에 유의하십시오. 과 "최종"비 터미널은 제어 토큰을 이동하고 나중에 터미널을 파생시키는 데만 사용됩니다. 또한 두 번째 규칙은 오른쪽 절반의 마지막 기호에 사용됩니다.
캐리를 오른쪽으로 옮기려면 남은 양을지나 쳐야합니다 이미 생성 :
모든 . 이제 캐리가 올바른 제어 토큰에 도달하면 왼쪽에 사용 된 규칙을 모방해야합니다.
모든 . 첫 번째 규칙은 오른쪽 절반의 첫 번째 기호에 사용되고 마지막 규칙은 마지막 기호에만 사용할 수 있으며 그렇지 않으면 파생이 종료되지 않습니다. 이제 종료 규칙 만 있으면됩니다
모든 그리고 우리는 끝났습니다. 이 규칙들도 (왼쪽) 모든 것이 끝난 후에 만 적용 할 수 있으며, 그렇지 않으면 파생은 종료되지 않습니다.
이 문법은 모호합니다. 할 수있을뿐만 아니라(안전하게) 언제라도 왼쪽 "헤드"의 왼쪽 어디든지 적용 할 수 있지만 동시에 여러 개의 캐리가 진행될 수도 있습니다. 그들은 서로를 추월 할 수 없기 때문에 올바른 순서가 유지됩니다. 많은 규칙 이 왼쪽의 두 기호를 모두 변경 하므로
위의 문법은 상황 에 맞지 않습니다 . 상황에 맞는 문법에는 사용할 수 없습니다. 다행히 모든 규칙을 시뮬레이션 할 수 있습니다 형태의
으로
우리는 훌륭하고 더 작은 문법으로 작업 할 수 있습니다. 여러 시뮬레이션 사이의 간섭이 아프지 않다는 것을 보여주는 것은 연습으로 남아 있습니다.
이것을 확장하는 방법을 보십니까 ? 그것은 또한 작동합니까? 당신은 같은 구성을 사용할 수 있습니다 정기적으로 ?