답변:
적어도 두 가지 관련 용도가 있습니다.
증명의 단순성
감소 및 오토마타에 대한 동등성을 포함하여 문맥이없는 문법에 대한 많은 증명 이 있습니다. 이것들은 당신이 다루어야 할 문법이 더 제한적 일수록 간단합니다. 따라서 일반적인 형식이 도움이 될 수 있습니다.
구체적인 예로서, Greibach 정규형은이 있음 (건설적) 표시하는 데 사용됩니다 (포함하지 않는 모든 CFL에 대한 -transition없는 PDA ).ε
구문 분석 가능
PDA를 사용하여 문법으로 단어를 구문 분석 할 수 있지만 이는 종종 불편합니다. 일반적인 형태는 우리에게 더 많은 구조를 제공하여 더 쉽게 파싱 알고리즘을 만들 수 있습니다.
구체적인 예로 CYK 알고리즘 은 Chomsky 정규 형식을 사용합니다. 반면에, Greibach 정규형은 재귀 하강 구문 분석을 가능하게합니다. 역 추적이 필요할 수 있지만 공간 복잡성은 선형입니다.
Chomsky 정규 형식을 사용하면 다항식 시간 알고리즘이 문법으로 문자열을 생성 할 수 있는지 여부를 결정할 수 있습니다. 동적 프로그래밍을 알고 있다면 알고리즘이 매우 매끄 럽습니다 ...
입력 길이 ( )가 이면 희미한 x 의 2 차원 배열 ( )을 가져옵니다 .n A n n
G I ( i , j ) 는 문법 에서 부분 문자열 도출 할 수있는 모든 기호를 나타냅니다 .
마지막으로 에 시작 기호 ( ) 가 포함 된 경우 , 문자열 I은 로 도출 할 수 있으며 이는 우리가 확인하고자하는 것입니다.S S
def decide (string s,grammar G):
//base case
for i=1 to n:
N[i,i]=I[i] //as the substring of length one can be generated by only a
terminal.
//end base case
//induction
for s=1 to n: //length of substring
for i=1 to n-s-1: //start index of substring
for j=i to i+s-1: //something else
if there exists a rule A->BC such that B belongs to N[i,j] and C
belongs to N[j+1,i+s-1] then add A to N[i,i+s-1]
//endInduction
if S belongs to N[1,n] then accept else reject.
나는 인덱스가 매우 미친 것 같습니다. 그러나 기본적으로 여기에 무슨 일이 일어나고 있습니다.
sub
Sheila Greibach는 Greibach 정규 형식을 발명하여 모든 CFG를 실시간으로 작동하는 PDA로 인식 할 수 있음을 증명했습니다 (예 : -transitions).