샤르의 잡동사니 창고

[프로그래밍 언어론] 구문 분석 방법

컴퓨터 2011. 3. 20. 12:38
* 이 포스트는 이전에 공부하면서 보고서로 작성한 것을 그대로 포스팅 한 것입니다.
* 참조 사이트 : http://wiki.fracktal.kr/doku.php?id=수업:컴파일러:구문_분석

구문분석(syntax analysis)은 파싱(parsing)이라고도 하며,
방법으로는 크게 top-down과 bottom-up의 두 종류로 나누어 볼 수 있습니다.

1) bottom-up
  주어진 표현식으로부터 시작 기호로 축약(reduce)해 나가는 방법으로, 문법에 제약이 없기 때문에 일반적으로 이용합니다.
- 축약(reduce) : S ⇒ abc 이고, A → b의 생성 규칙이 존재할 때, 문장 형태 abc에서 b를 A로 대치하는 것을 축약이라고 합니다.

예) 다음의 문법이 존재할 때, 문자열 abbcde를 분석하여 축약하는 과정
<문법>
S → aAcBe    ────── ➀
A → Ab        ────── ➁
  | b          ────── ➂
B → d         ────── ➃

<축약 과정>
        abbcde ⇒ aAbcde        ─ ➂에 의해 b를 A로 대치
                  ⇒ aAcde         ─ ➂에 의해 Ab를 A로 대치
                  ⇒ aAcBe         ─ ➃에 의해 d를 B로 대치
                  ⇒ S               ─ ➀에 의해 aAcBe를 S로 대치

2) top-down
  시작 기호로부터 생성 규칙(rule)을 좌측 유도해 나가는 방법으로, 좌측 유도 과정에서 생성 규칙이 잘못 적용되었으면 그 생성 규칙에서 참조한 문자열을 재검토하기 위해 입력을 보내고, 다른 생성 규칙을 적용하여 유도를 시도합니다. 이와 같은 재검토 과정을 역행(backtracking)이라 부르며, 한 번 입력된 표현식을 여러 번 반복하여 다루기 때문에 시간이 매우 많이 걸린다는 단점이 있습니다.

top-down 구문 분석에서 정의된 문법이 어떤 조건을 만족하면, 주어진 스트링을 분석할 수 있게 되는데 이를 LL조건이라 하며, 이 조건을 만족하는 문법을 LL문법이라 합니다.

LL은 입력 문자열을 왼쪽에서 오른쪽으로 읽어 가며(left to right scanning) 좌 파스(left parse)를 생성하기 때문에 붙여진 이름입니다.

- left-recursion : 어떤 표현에 대해 A ⇒ A 와 같은 유도 과정이 있는 경우, 구문 분석 시에 같은 생성 규칙이 순환적으로 재귀되어 결국 무한루프에 빠지게 됩니다. 이 경우, 문법 변환을 통해 left-recursion 을 없애주어야 합니다.

- left-factoring : RHS에 공통된 기호를 가진 두 개 이상의 다른 정의가 존재할 경우(예: A → ab | ac ), top-down 구문 분석에선 어떤 규칙을 적용할지 알 수 없게 되므로 비단말 기호를 도입하여 인수분해 하는데, 이를 left-factoring 이라 합니다.


'컴퓨터' 카테고리의 다른 글

[프로그래밍 언어론] EBNF  (0) 2011.03.25
SQL 주요 함수 #1  (0) 2011.03.23
파이어폭스4 정식 출시  (0) 2011.03.23
[SQL] SELECT 구문의 기본  (0) 2011.03.21
[프로그래밍 언어론] 구문분석의 모호성  (0) 2011.03.20
[프로그래밍 언어론] 파스트리(Parse tree)의 개요  (2) 2011.03.20
[프로그래밍 언어론] BNF (Backus-Naur Form) 란?  (0) 2011.03.20
Base64 인코딩에 대한 잡설  (0) 2011.03.20
[Java] Conversion과 Casting  (0) 2011.03.19
[Java] Primitive data type (원시 자료형)  (0) 2011.03.19
현재 브라우저에서는 댓글을 표시할 수 없습니다.
IE9 이상으로 브라우저를 업그레이드하거나, 크롬, 파이어폭스 등 최신 브라우저를 이용해주세요.
블로그 이미지

안드로이드 앱 개발을 업으로 삼고있는 헬조선 컴돌이의 잡동사니 창고

by Selnis

카운터

Total
Today
Yesterday

최근에 올라온 글

  • 더 보기

최근 댓글

방명록 : 관리자 : 글쓰기
Selnis's Blog is powered by daumkakao
Skin ⓘ material T Mark1 by 뭐하라

ⓒ 2015. Selnis all rights reserved.

favicon

샤르의 잡동사니 창고

안드로이드 앱 개발을 업으로 삼고있는 헬조선 컴돌이의 잡동사니 창고

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 전체 (322)
    • 공지 (4)
    • 잡담 (35)
    • 게임 (150)
    • 컴퓨터 (123)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바