2013-11-26 4 views
2

이 문법을 감안할 때?모호한 문법 (BNF 표기법)

+1

같은 문장을 두 가지 다른 파생어로 제공 할 수 있습니다. –

+0

일부 문장에 대해 가능한 두 가지 구문을 찾습니다. 이것을 시도해보십시오 :'true이면 s1; s2' – rici

+0

이 질문은 이미 질문되었으며 답변되었습니다 : http://stackoverflow.com/questions/4788148/what-is-the-easiest-way-of-telling-whether-a-bnf-grammar-is-ambiguous- 또는 - rq = 1 –

답변

2

동일한 문장에 대해 두 개의 구문 분석 트리를 그릴 수 있거나 동등하게 두 개의 가장 가까운 파생어를 작성할 수있는 경우 문법이 모호합니다. 이를 수행 할 수있는 일반적인 알고리즘이 존재하지 않습니다 (모호성은 결정 불가능한 문제입니다). 그러나 많은 문법에서는 어렵지 않습니다.

예제 @rici로 충분합니다.

If true then s1; s2 

한 파스 트리가

<Program> 
    / | \ 
<Program> ; <Stmt> 
    |   | 
<Stmt>  s2 
    /|\__________ 
/|  \  \ 
If <Bool> then <Program> 
    |    | 
    true   <Stmt> 
        | 
        s1 

입니다 당신이 다른 하나를 해결하게됩니다.