2013-03-08 4 views
0

그래서 나는 숙제를하고 난이 문법은 LL 파서 작동하지 않습니다 이유를 알아 내려고 2 시간 동안 지출했습니다문법 && LL 파서

<A> → a <B> 
<A> → a b <C> 
<B> → b d <D> 
<C> → d <E> 
<D> → m n 
<E> → x y 

사람은 오른쪽으로 날 지점 시겠어요 방향? LL가 트립 될 수있는 방법 중 하나는 그것이 내가 여기 있다고 생각하지 않는 무한 루프로 진행되는 것입니다.

감사

+0

아마도 assignmet이 LL (** 1 **)이 아닌 이유일까요? – Apalala

답변

2

내가 LL 파서에 의해 당신은 LL (1) 파서 문법 구문 분석-줄 수가있는 LL (1) 파서되기 위해서는

(1 내다과 LL 파서)을 의미하는 것으로 추정 LL (1)이어야합니다. 문법이 LL (1)이되어야하는 몇 가지 사항이 있습니다.이 중 하나가 손상되면 LL (1) 충돌이라고합니다.

  • FIRST/FIRST 컨플릭트 아닌 모든 단말

    각 생산 끊긴 1 세트를 가져야한다. (첫 번째 세트는 개체로부터 유래 된 문장을 시작할 수있는 모든 단말기들의 집합이다.)

    EG :의

    <A> -> a <B> 
    <A> -> a b <C> 
    

    제 세트 : 위 예에서, 비 - 터미널은 두 제작 갖는다 각각의 작품은 다음과 같습니다 :

    FIRST(a <B>) = {a} 
    FIRST(a b <C>) = {a} 
    

    이 두 세트가 교차한다는 것을 분명히 볼 수 있습니다. 이것은 LL 파서에서 A가 스택에 있고, 읽힐 다음 심볼이 'a'인 지점에 도달하면 <A> -> a <B> 또는 <A> -> a b <C>을 선택할 지 여부를 파서가 알 수 없기 때문에 문제가됩니다.

  • FIRST/FOLLOW 충돌 :이 발생

    경우에 대한 특정 A 비 종단; FOLLOW(A)FIRST(A)은 교차하고 ANULLABLE입니다. 이 특별한 충돌은 당신의 모범에서 일어나지 않습니다. FIRST에 대한 자세한 내용은

, 따라 NULLABLE, 난 몇 가지 예를 들면, the Wikipedia page on LL(1) Conflicts를 참조 이러한 충돌에 대한 자세한 내용은

것이라고합니다.