1

나는 오토 마톤과 문법 문제로 고생했다. 나는 많은 성공을 거두지 않고 많이 수색했다.^(2^i) 언어 문법 구성

이 언어 L을 생성하는 문법을 구성하는 것이 가능합니까?

L = { a(2i) | i >= 0}

누구나 간단한 솔루션을 제공 할 수 있습니까?

답변

5

이 언어의 경우 문법을 작성할 수는 있지만 문맥 자유 문법이 아닙니다. pumping lemma을 사용하면 쉽게 시연 할 수 있습니다.

펌핑 표제어는 CFL 들어, 일부 정수를가한다고 p되도록 길이 적어도 pu, v, x, yz가 문자열 uvxyz로 기록 될 수있다 언어의 문자열 svy이 비어 있지 않으며 모든 정수가 n 인 경우 uvnxynz 문자열도 해당 언어로 표시됩니다. 인

는 (길이 lp보다 크다) 언어의 문자열 들어있다가 일부 k 길이이다 l + nk 정수 n 언어의 문자열이 존재하도록. 이러한 문자열은 기하 급수적으로 길이가 있으므로 언어가 문맥에 자유로울 수 없으므로 언어 ​​a2i의 경우는 그렇지 않습니다.

언어에 대한 컨텍스트가없는 문법을 만드는 것은 그렇게 어렵지는 않지만 얼마나 유용 할 지 모르겠다.

다음은 메타 문자를 제거하는 데 사용되는 제작물로 인해 유형 0 문법입니다 (즉, 문맥 감지가 아님). '를 두 배로 왼쪽에서 오른쪽으로 이동 여기에 기본적인 아이디어는 우리가 시작하고 문자열 ([])의 주위에 끝 마커 넣고 거기에 우리가 "복사기"를 가지고 (& rarrtl)입니다 에스; 이 끝 마커를 칠 때, 그것은 하나는 (및 larrtl;)를 다시 셔틀로 설정하거나 그 끝 마커를 먹고 신생 마커 구축함 ()

Start: [a]
a: aa 변신
]: ]
]:
a: a
a: a
[: [
[: