EPAL을 인식하는 비 일반 CFG 구문 분석 알고리즘이 있습니까?


23

회 문의 언어 인 EPAL은 다음과 같은 명확한 문맥없는 문법에 의해 생성 된 언어로 정의됩니다.

Saa

Sbb

SaSa

SbSb

EPAL은 많은 파싱 알고리즘의 '베인'입니다. 언어를 설명하는 문법을 파싱 할 수있는 명확한 CFG에 대한 파싱 알고리즘은 아직 만나지 못했습니다. 특정 파서가 파싱 할 수없는 명확한 CFG가 있음을 보여주기 위해 종종 사용됩니다. 이것은 내 질문에 영감을 주었다.

EPAL에서 작동하는 명확한 CFG 만 허용하는 구문 분석 알고리즘이 있습니까?

물론, 언어를 선형 시간으로 구문 분석하는 문법에 대한 임시 2 패스 파서를 설계 할 수 있습니다. EPAL을 염두에두고 특별히 설계되지 않은 분석 방법에 관심이 있습니다.


1
나는 재귀 강하에 의해 LL (1)에 어떤 문제가 있는가?
Raphael

3
역 추적 재귀 하강은 언어가 k에 대해 LL (k)이 아니므로 EPAL을 처리 할 수 ​​없습니다. 역 추적을 사용한 재귀 강하는 문법을 시간으로 처리 할 수 있지만, 이는 지수 최악의 동작을 갖는 일반적인 알고리즘입니다. O(n2)
Alex ten Brink

O(N2) 는 지수가 아니며 2 차입니다. 는 지수입니다. O(2N)
Victor Stafusa

1
@Victor : 역 추적은 특정 문법이 아닌 일부 문법에서 지수 동작을합니다. 여전히 모호한 문법에서 작동하는 알고리즘이므로 내 질문에 대한 답변으로 할인합니다.
Alex ten Brink

1
@ jmad : 내 의도는 언어를 구문 분석하는 것이 아니라 (선형 시간으로 간단하게 수행 할 수 있음) 오히려 내 호기심을 충족시키는 것입니다. 구문 분석 방법으로 구문 분석 할 수없는 언어의 예로서 사용되는 것을 보았습니다. 그것을 인식하는 파싱 방법이 있는지 궁금합니다.
Alex ten Brink

답변:


14

다음과 같은 파싱 전략 스케치를 고려하십시오.

한쪽 끝에서만 입력을 읽는 대신 양쪽에서 읽고 일치하는 규칙을 찾습니다. 우리는 재귀 하강 스타일로 이것을 할 수 있습니다. 호출에 ( ) , 프리픽스 찾을 w 및 접미사 V 룰이되도록 입력에 w B의 에 하강 B ( ) 나머지 단어. 일치하는 규칙이 없으면 단어를 거부하십시오.A()wvAwBvB()

AwBvAwBvwpwvsvΘ(n2)

이 아이디어는 비선형 문법에는 전혀 효과가 없습니다. 선형이지만 모호한 문법은 일반적으로 역 추적없이 구문 분석 할 수 없습니다 (적어도 음수 입력의 경우).


  1. w v v w swpv 는 여기서 및 를 의미합니다. 즉, 어느 단어도 다른 단어의 접두사입니다. 는 접미사와 비슷합니다.wvvws

1
우수한! 정확히 내가 찾던 것. 이 아닌 언어 것을 중대 어떤 위해 K가 이러한 간단한 알고리즘에 의해 구문 분석한다. NLR(k)k
Alex ten Brink

1
이것에 대해 좀 더 생각한 후에, 나는 당신의 설명에서 사소한 오류를 발견했습니다 : 선형 문법 는 분명하지만 설명하는 고유 접두사는 없습니다. 여전히 고유 한 접두사가 있지만 비 터미널 내부를 찾아서 가져와야하는 경우가 있으며 실행 시간은 O ( n 2 )가 됩니다. 알고리즘은 E P A L 에서 작동합니다 . SaAb|aBb,Aa,BbO(n2)EPAL
Alex ten Brink

@AlextenBrink 잘 잡았습니다. 이것을 설명하기 위해 편집했습니다.
Raphael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.