2013-03-07 10 views
5

다음 문법을보고 있는데 3 행에서 모호합니다.하지만 확실하지 않습니다. 모호한 문법

<SL> → <S> 
<SL> → <SL> <S> 
<S> → i <B> <S> e <S> 
<S> → i <B> <S> 
<S> → x 
<S> → y 
<B> → 5 
<B> → 13 

가 나는 두 개의 서로 다른 구문 분석 트리를 생성하는 생각이 문자열 xi13yi5xeyx을 찾았지만, 메신저 잘못하고 있는지 확실하지 않습니다.

내 결과를 확인해주세요.

+0

이 문법은 Backus-Naur 형식으로 작성 되었습니까? 아니면 다른 표기법을 사용하여 작성 되었습니까? –

답변

5

예 문법은 모호합니다.
당신은 언급하지 않은하지만 <SL>은 우리가 followes i5i5yey을 짜서 위해 두 개 이상의 파스 트리 ()을 그릴 수있는 문법 규칙을 사용하여 실행 가능한

을 시작 생각 :

 <SL>        <SL> 
     |         | 
     <S>        <S> 
    //|\ \       /| \ 
    // | \ \      /| \ 
// | \ \      / | \ 
// | \ \      i <B> <S>  
/| | | \       |//|\ \  
i <B> <S> e <S>      5// | \ \ 
// | \  |      // | \ \ 
// | \ y      // | \ \ 
5 i <B> <S>       /| | | \ 
     | |       i <B> <S> e <S> 
     5 y        | |  | 
              5 y  y 

구조 두 구문 분석 트리의 문법은 서로 다르다 모호한 문법입니다!

당신은 나무 문자열 xi13yi5xeyx ( 당신을위한 운동으로이를 떠납니다) 언어가이 문법에 의해 생성되는 중요

not ambiguous language 인을 생성하기 위해 위 그림을 확장 할 수 .And의 수를 작성하는

문법 언어로 각 문자열에 대해 고유 한 트리를 항상 생성하는이 문법에 대해 동등한 모호하지 않은 문법.

HINT : 모호하지 않은 문법을 작성합니다.

문법은 C 언어로 if loop의 문법과 매우 비슷합니다 (if loop의 구문이 다른 언어에 주목하십시오). 거의 모든 컴파일러 디자인 서적에서 해결되었습니다.
Resolving the General Dangling Else/If-Else Ambiguity

참조 : 예약 컴파일러 원칙, 아호-Ullman은 제에 의한 기술 및 도구 4.5 충돌 시프트시와-줄 구문 분석을.