2014-10-22 11 views
0

아래 문법이 있으며 LL 파서를 사용하여 구문 분석 할 수 있는지 알아 내려고합니다. 그렇지 않다면 설명하십시오. 나는 두 집합의 교집합을 이해하는 것과 LL 파서 문법

S --> ab | cB 
A --> b | Bb 
B --> aAb | cC 
C --> cA | Aba 

는 페어 disjointness 시험을 통과 할 비어 있어야합니다.

하지만 어디서부터 시작해야할지 모르겠다. 내 교과서와 http://en.wikipedia.org/wiki/LL_parser#Parsing_procedure을 살펴 보았지만 따라하기 위해 어떤 예도 찾을 수 없다. 이 과정에서 다른 유사한 문제를 처리하는 방법을 이해하기 위해서는 절차 나 단계를 살펴 봐야합니다. 어떤 도움을 주셔서 감사합니다.

+0

왼쪽 재귀가있는 경우 LL (k) 파서는이를 구문 분석 할 수 없습니다. – Mephy

+0

@Mephy : 불행히도 역행렬은 유지되지 않습니다. 왼쪽 재귀가 없더라도 LL (k)가되지 않을 수도 있습니다. –

답변

1

모든 비 터미널에 대해 FIRST를 계산하고, 주어진 비 터미널의 대체 세트에 대한 FIRST 세트가 모두 비어 있는지 확인합니다. 모두가 있다면, 그것은 LL이고, 그렇지 않은 비 터미널이 있다면 그렇지 않습니다. ε이있는 경우; 규칙에 따라 FOLLOW 세트도 필요합니다.

컴퓨팅 FIRST 세트는 매우 쉽습니다. 문법이 LL (1)인지 알려줍니다. FIRST k 세트를 계산하는 것은 상당히 복잡하지만, 특정 k에 대한 문법이 LL (k)인지 알려줄 것입니다. FIRST k 세트를 계산하십시오.

+0

그러면 B의 첫 번째 집합은 {a, c}이고 C는 {c, b, a }이고 A는 {b, a, c}입니다. 내가이 일을 제대로하고 있니? 그래서 지금 S는 무엇이 될까요? –

+0

@ JessicaDinh 네, A, B, C의 FIRST 세트를 올바르게 계산 한 것 같습니다. 그리고 그것들은 분리되어 있지 않기 때문에 문법은 LL1을 파싱 할 수 없습니다. 이제는 적절한 K를 찾거나 포기하기 전까지는 더 큰 K에 대한 FIRST 세트를 생성 할 수 있습니다. 어떤 문법에 대해 LL (1) 또는 LL (K)인지를 결정해야합니까? –