나는이 문법을 사용하여 FA를 정의 할 수 있습니다CFG를 NDPA로 변환하는 규칙은 무엇입니까?
S -> aSb
S -> c
S -> dA
A -> Sd
가 어떻게 첫 번째 규칙과 마지막을 관리합니까? 둘째로 나는 다른 상태 (마지막 상태)를 만들고 S와이 새로운 상태를 만들어야한다고 생각합니다. 세 번째 대신에 나는 상태 "A"를 만들고 "d"를 전달하여 S에 연결해야한다고 생각합니다.
나는이 문법을 사용하여 FA를 정의 할 수 있습니다CFG를 NDPA로 변환하는 규칙은 무엇입니까?
S -> aSb
S -> c
S -> dA
A -> Sd
가 어떻게 첫 번째 규칙과 마지막을 관리합니까? 둘째로 나는 다른 상태 (마지막 상태)를 만들고 S와이 새로운 상태를 만들어야한다고 생각합니다. 세 번째 대신에 나는 상태 "A"를 만들고 "d"를 전달하여 S에 연결해야한다고 생각합니다.
CFG에서 PDA를 가져 오는 데 사용할 수있는 알고리즘이 있습니다. 예를 들어 하향식 및 상향식 파서를 살펴보십시오. PDAs가 CFG에 의해 생성 된 언어를 받아들이며, 그 반대의 경우도 그런 구조를 사용한다는 평범한 증거로 생각합니다.
대안은 문법에 의해 생성 된 언어를 이해하고 직접적으로 PDA를 설계하는 것입니다. 이것은 덜 기계적이지만보다 간결한 PDA를 산출 할 잠재력이 있습니다. 이 경로를 이동하려면, 우리는 먼저 안전하게위한 유일한 생산의 RHS로 대체 될 수있는 비 터미널을 인식하여 문법을 단순화 할 수 있습니다 :
S -> aSb
S -> c
S -> dSd // removed A -> Sd and replaced here
방법이 문법이 작동합니까?
c
이 있습니다.c
왼쪽과 오른쪽에 일치하는 d
이 있습니다.a
초가 있고 c
오른쪽에 b
초가 붙습니다.
a
들과 d
의 당신이 c
가 나타날 때까지 다음과 같이PDA를 작동합니다. 스택에있는 모든 것을 밀어 넣으십시오. c
이 표시되면 다음 상태로 이동하고 c
을 누르지 마십시오.
b
들과 d
들까지, 스택에서 a
들과 d
들 터지는 : 이
q s x q' s'
------------------------------
q0 a,d,Z a q0 aa,ad,aZ
q0 a,d,Z d q0 da,dd,dZ
q0 a,d,Z c q1 a,d,Z
q1 a b q1 -
q1 d d q1 -
:
여기 전환 테이블입니다. 빈 스택을 수락하거나 상태를 수락하려면 f(q1, Z, -) = (q2, Z)
과 같은 전환을 추가하고 q2
을 수락 할 수 있습니다. PDA는 비결정적으로 전환 할 것이며 입력이 고갈되지 않는 한 충돌 할 것입니다.
귀하의 질문의 제목은 귀하가 LLG를 가지고 있음을 나타내지 만 귀하는 그렇지 않습니다. 뭘 물어 보는 거냐?그 문법을위한 유한 오토 마타 만드는 법을 묻고 있습니까? 그 문법은 규칙적인 것이 아닙니다. –
안녕하세요, 저는 이것이 마지막 규칙 때문에 왼쪽 선형 문법 이었지만 말입니다. FA 생성 방법은 어떻게합니까? –
아니요 LLG는 _all_ 규칙 하나가 아닌 왼쪽에 단일 비 터미널이있는 규칙입니다. 이 문법으로는 FA를 만들 수 없습니다. 첫 번째 규칙으로 인해 문법이 규칙적이지 않습니다. FA가 없습니다. NDPA를 만들 수있는 이유는 언어가 문맥에 자유 롭기 때문입니다. 이 문제는 어디서 났니? –