1 / 44

Context-Free Languages

Context-Free Languages. Introduction. <sentence> -> <noun phrase><verb phrase> <noun phrase> -> <adjective><noun phrase> <noun phrase> -> <noun> <verb phrase> -> <verb> <verb> -> laughs <noun> -> apple | girl <adjective> -> red. Introduction. <expression> -> <expression> + <expression>

ona
Télécharger la présentation

Context-Free Languages

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Context-Free Languages

  2. Introduction • <sentence> -> <noun phrase><verb phrase> • <noun phrase> -> <adjective><noun phrase> • <noun phrase> -> <noun> • <verb phrase> -> <verb> • <verb> -> laughs • <noun> -> apple | girl • <adjective> -> red

  3. Introduction • <expression> -> <expression> + <expression> • <expression> -> <expression> * <expression> • <expression> -> (<expression>) • <expression> -> id

  4. Introduction <expression> => <expression> * <expression> => (<expression>)*<expression> => (<expression>)*id =>(<expression>+<expression>)*id =>(<expression> + id) * id =>(id + id) * id

  5. 문맥자유언어 • 문맥자유언어 • 프로그래밍 언어 설계에 이용됨 • 효율적인 컴파일러 작성에 사용됨

  6. 문법 제약 완화 • 제약 • 생성규칙의 좌변은 반드시 하나의 변수 • 생성규칙의 우변은 특별한 형태(좌선형, 우선형 문법) • 완화 • 우변에 어떤 문자열이든 허용(문맥자유문법)

  7. 정의 5.1 • 문법 G = (V,T,S,P) 에서 모든 생성규칙이 A -> x. 의 형태를 가지면 G를 문맥-자유문법(context-free grammar:CFG)라고 한다. 여기서 A  V 이고, x  (V  T)*이다. • 또한 언어 L이 L = L(G)를 만족하는 문맥-자유 문법 G가 존재하고 오직 그럴 때에만 L을 문맥-자유 언어(context-free language:CFL)라고 한다.

  8. 예제 5.1 • 생성규칙으로 문법 G = ({S}, {a,b}, S, P), S -> aSa, S -> bSb, S -> , 는 문맥-자유 문법이다. • 유도과정 • S=>aSa=>aaSaa=>aabSbaa=>aabbaa • L(G) = {wwR : w  {a,b}*}.

  9. 예제 5.2 • 문법 G = ({S, A, B}, {a,b}, S, P)는 문맥-자유 문법이다. S -> abB, A -> aaBb, B -> bbAa, A ->  • L(G) = {ab(bbaa)nbba(ba)n : n  0}

  10. 문법 • 선형문법 • 정규문법 • 문맥-자유 문법

  11. 예제 5.3 • 언어 L = {anbm : n  m} 는 문맥-자유 언어이다. n > m 인 경우 n < m 인 경우도 해결가능 S -> AS1, S -> AS1|S1B, S1 -> aS1b | , S1 -> aS1b | , A -> aA | a. A -> aA | a, B -> bB | b.

  12. 예제 5.4 • 다음의 생성규칙을 갖는 문맥-자유 문법 G를 고려해보자 S -> aSb | SS | . • abaabb, aababb, ababab, … • L = {w  {a, b}* : na(w) = nb(w) and na(v)  nb(v), 단 v는 w의 접두부임}

  13. S -> AB A -> aaA A ->  B -> Bb B ->  aab의 유도과정 S=>AB=>aaAB=>aaB =>aaBb=>aab S=>AB=>Abb=>aaABb=>aaAb=>aab 좌측우선/우측우선 유도 1 2 3 4 5 1 4 2 5 3

  14. 정의 5.2 • 유도 과정의 각 단계에서 각 문장 형태의 가장 좌측 변수가 대체되는 유도를 좌측우선유도 • 가장 우측 변수가 대체되는 유도를 우측우선 유도라고 함

  15. 예제 5.5 • 다음의 생성규칙을 갖는 문맥-자유 문법을 고려해 보자. S -> aAB, A -> bBb, B -> A | . 문자열 abbbb에 대한 좌/우측 우선 유도를 고려

  16. 유도트리 • 문자열의 유도 과정을 보이는 하나의 방법 • 유도 트리는 순서트리(ordered tree) • 부모노드 : 생성규칙의 좌변에 있는 변수 • 자식노드 : 생성규칙의 우변에 있는 심볼

  17. 유도트리 • A->abABC A a b A B c

  18. 정의 5.3 • G=(V,T,S,P)가 문맥-자유 문법이라 하면, 순서 트리가 G의 유도 트리가 되기 위한 필요충분조건 • 루트 노드의 라벨은 시작 심볼 S • 각 리프 노드의 라벨은 T {}의 심볼 • 각 내부 노드의 라벨은 V의 심볼 • 만약 라벨이 AV인 노드가 라벨이 a1, a2, …, an 인 자식 노드들을 갖는다면, P는 다음 형태의 생성규칙을 갖고 있어야 함 A->a1a2…an • 라벨이 인 자식 노드는 형제 노드가 없다. 즉, 라벨이 인 자식 노드를 갖는 노드는 다른 자식들을 가질 수 없음

  19. 부분 유도트리 2.a 모든 리프 노드의 라벨은 VT{}의 심볼 3. 각 내부 노드의 라벨은 V의 심볼 4. 만약 라벨이 AV인 노드가 라벨이 a1, a2, …, an 인 자식 노드들을 갖는다면, P는 다음 형태의 생성규칙을 갖고 있어야 함 A->a1,a2,…,an 5. 라벨이 인 자식 노드는 형제 노드가 없다. 즉, 라벨이 인 자식 노드를 갖는 노드는 다른 자식들을 가질 수 없음

  20. 예제 5.6 abbbb 유도 S -> aAB, A -> bBb, B -> A |  S a A B b B b

  21. 예제 5.6 abbbb 유도 S -> aAB, A -> bBb, B -> A |  S B a A A b B b b B b  

  22. 파싱과 모호성

  23. 파싱 • L(G)에 속하는 w가 유도되는 데 사용된 일련의 생성 규칙들을 찾는 과정=>파싱

  24. 파싱단계(좌측유도) • 다음과 같은 시작 심볼을 좌변에 갖는 모든 생성규칙 S->x 시작 심볼 S로부터 한 단계에 유도될 수 있는 모든 문장 형태 x를 찾는다. • 만약, 어떤 x도 w와 일치하지 않으면, 다음 라운드에서 각 x의 가장 왼쪽 변수에 적용될 수 있는 모든 생성 규칙들을 적용, 새로운 문장 형태들의 집합 생성 • 새롭게 생성된 문장 형태들 가운데 w로 유도될 수 없는 문장 형태는 제외 • w와 일치되는 문장이 생성 될 때까지 2,3번 수행

  25. 파싱단계(좌측유도) • 철저한 탐색 파싱(exhaustive search parsing) • 하향식 파싱(top-down parsing)

  26. 예제 5.7 • 다음의 생성 규칙을 갖는 문법 G에서 문자열 w=aabb가 유도 되는지의 여부확인 S->SS|aSb|bSa|

  27. w=aabb • S->SS|aSb|bSa| • 첫 라운드 • S=>SS • S=>aSb • S=>bSa • S=>  • 유도 3, 4는 고려대상에서 제외 • 두번째 라운드에서 1의 문장 형태 SS의 가장 좌측 변수 S에 생성규칙적용 • S=>SS=>SSS (1적용) • S=>SS=>aSbS (2적용) • S=>SS=>bSaS (3적용) • S=>SS=>S (4적용)

  28. w=aabb • S->SS|aSb|bSa| • 두번째 라운드에서 2의 문장 형태로부터 • S=> aSb =>aSSb (1적용) • S=> aSb =>aaSbb (2적용) • S=> aSb =>abSab (3적용) • S=> aSb =>ab (4적용) • 위의 새로운 문장 형태들 중 일부 제외가능 • 다음 라운드에서 다음과 같은 유도 생성가능 • S=> aSb(2) =>aaSbb(2) => aabb(4) • 그러므로 aabb는 주어진 문법에 의해 생성되는 언어에 속한다.

  29. 철저한 탐색 파싱 • 문제점 • Exhaustive search 로 인한 효율성 저하 • w가 L(G)에 속하지 않을경우 종료되지 않을 수도 있음 => 종료조건 추가 • 바람직하지 않은 생성규칙 배제 • A =>  • A => B

  30. 예제 5.8 • S->SS|aSb|bSa| => S->SS|aSb|bSa|ab|ba • 모든 문자열 w{a,b}+에 대하여 철저한 탐색 파싱 방법은, 항상 |w|단계 이내에 모든 파싱 과정이 종료하게 됨 • 이는 각 유도 단계에서 나타나는 문장 형태가 최소한 한 개의 심볼이 증가 되기 때문 • 따라서, |w| 단계 후에는, w가 L(G)에 속하는지 여부를 알게 됨

  31. 정리 5.3 • 모든 문맥-자유 문법에 대하여 임의의 w L(G)를 |w|3에 비례하는 수의 단계 내에 파싱하는 알고리즘이 존재한다. • Harrison 1987, Hopcroft and Ullman 1979

  32. 정의 5.4 • 문맥-자유 문법 G=(V,T,S,P)의 모든 생성규칙들이 다음과 같은 형태이면 단순 문법 혹은 s-문법 이라 불린다. A->ax • 여기서 AV, aT, xV*이고 임의의 쌍(A,a)는 P에서 많아야 한 번 나타난다.

  33. 예제 5.9 • 문법 S->aS|bSS|c 는 s-문법이다. • 문법 S->aS|bSS|aSS|c 는 s-문법이 아니다. 그 이유는 쌍(S,a)가 두 생성규칙 S->aS와 S->aSS에서 나타나기 때문이다.

  34. s-문법 • 만일 G가 s-문법이면, L(G)에 속한 모든 문자열 w가 |w|에 비례하는 노력으로 파싱 될 수 있다. • 문자열 w=a1a2…an에 대한 탐색, 좌변에 S가 있고 우변이 a1으로 시작하는 생성규칙은 많아야 하나 존재 S=>a1A1A2…Am • 그 다음에 변수 A1을 치환, 역시 많아야 하나의 선택 S=>a1a2B1B2…A2…Am

  35. 정의 5.5 • 문맥-자유 문법 G에서 두 개 이상의 서로 다른 유도 트리를 갖는 문자열 w가 존재하면, 문법 G는 모호하다(ambiguous)고 한다. • 즉 모호성은 어떤 문자열 w에 대해 두 개 이상의 좌측우선 혹은 우측우선 유도가 존재하는 것을 의미한다.

  36. 예제 5.10 • 생성규칙 S->aSb|SS|를 갖는 문법 G는 모호 함 • 문자열 aabb에 대해 S S a S b S S a S b  a S b  a S b 

  37. 예제 5.11 • 문법 G=({E,I},{a,b,c,+,*,(,)},E,P)의 생성규칙 E-> I E->E+E E->E*E E->(E) I->a|b|c • (a+b)*c, a*b+c  L(G)

  38. 예제 5.11 • a+b*c E E E + E E * E I E * E E + E I a I I I I c b c a b

  39. 예제 5.11 • 우선순위 적용 E E->I E->E+E E->E*E E->(E) I->a|b|c E->T T->F F->I E->E+T T->T*F F->(F) I->a|b|c E + T T T * F F F I I I c a b

  40. 문맥-자유 문법과프로그래밍 언어

  41. 정규/문맥-자유 언어 • 정규언어 • 프로그래밍 언어의 어휘, 단어 등 단순한 패턴 정의 • 문맥-자유 언어 • 정규 언어에서 해결하지 못하는 보다 복잡한 구성 모델링

  42. 프로그래밍 언어 • 기술 문법 • Backus-Naur 형(BNF) • BNF 표기의 예 <expression> ::=<term>|<expression>+<term> <term> ::=<factor>|<term>*<factor> • 단말심볼 : +, * • ::= 는 ->의 의미 • 변수 : 처음은 ‘<‘로 끝은 ‘>’로 표기

  43. 프로그래밍 언어 • Pascal에서 if-then-else 문장 <if_statement>::=if<expression<then_clause><else_clause> • s-문법에서 요구하는 규칙과 유사 • 프로그래밍 언어에서 왜 키워드를 쓰는가? • 여러 생성규칙 중 어떤 생성규칙을 적용해야 하는가를 알려줄 수 있는 하나의 방법

  44. 프로그래밍 언어 • 프로그래밍 언어의 모든 기능들이 s-문법에 의해서 정의 될 수는 없다. • 컴파일러 • LL문법 • LR문법

More Related