2016-11-03 3 views
-1

이 연습에는 약간의 문제가 있습니다. 이 문법을 감안할 때컴파일러 : 모호한 문법 변경

:

S -> aX | X 
X -> aXb | b | eps 

A)는 문자열

B)) 문법

C를 캡처 어떤 언어로 말하는 문법을 변경하고 후손을 구축 모호한 것을 보여준다 파서

해결 방법 :

a)

L = {a^n b^n: n >= 0} U {a^n b^m: n=m+1, n,m >= 0} U {a^n b^m: m=n+1, n,m >= 0} 

C) 내 문제는 파서를 구축 할 수있는 문법을 변경할 수 있습니다 : 문법이 언어를 캡처

- S -> aX -> ab 
- S -> X -> aXb -> ab 

B) : 나는 문자열 'AB'와 모호한 보여줍니다. 다른 문법을 시도하지만 모호합니다. 예를 들어이 들어 는 :

- G -> X$ 
    X -> aX' | b | eps 
    X' -> XB | eps 

는 당신이 날 행사에 대한 올바른 문법을 찾거나 나에게 입력을 제공하기 위해 도와 드릴까요? you.undoubtedly다시피

답변

-1

,

S -> X | a S b 

는 "a S와 S b 동수로 둘러싸여 X의 인스턴스"로 설명 될 수있는 언어. 여기서 X은 재귀의 기본입니다.

설정 한대로 대상 언어는 각 문자의 수가 같거나 하나의 문자가 하나 더 있습니다. 따라서 우리는 "X의 단순한 정의가이 언어를 생성 할 수있는 것은 무엇입니까?"라고 묻습니다.

+0

생산량은 X -> a 일 수 있습니다. 비. 그러나이 프로덕션에서는 문법이 파싱 테이블에서 하향식 구문 분석을 위해 충돌을 생성합니다. 다른 작품을 생각하니? – Federico

+0

@federico : 사실,'X -> a | b | ε'; 그렇지 않으면 균형 잡힌 문자열을 사용할 수 없습니다. 그것은 모호하지는 않지만 LL (k)는 아닙니다. LR (k)도 아닙니다. LL (1) 문법은 더 까다 롭지 만 가능합니다. 접두어와 최대 (유한) 길이 접미사로 언어를 분해하는 것에 대해 생각해보십시오. – rici