Passion/Python

PLY - 개요

sunshout 2007. 6. 26. 23:41
내용의 정리는 Document 를 기반으로 하는데 내 기준으로 정리합니다.

1. Introduction
PLY는 기존의 C에서 사용하는 Lex와 Yacc을 Pure Python으로 구현한 것으로 보면 된다.
LALR(1) 파싱을 한다.
설명의 기준의 기본적인 컴파일러에 대한 이해를 하고 있다고 가정한다.

2. PLY Overview
PLY는 크게 두개의 모듈 lex.py 와 yacc.py로 구성되어 있다.
둘다 ply라는 Python 패키지에 포함되어 있다.
간단하게 설명하면
lex.py는 입력 파일을 받아서 토큰으로 잘라서 잘 저장하는 기능을 한다.(일반적인 lex를 유치원 수준으로 설명하면)
yacc.py는 구분된 토큰을 바탕으로 문법(context free grammar)에 맞는지를 확인한다.
이를 가지고 parsing table을 생성하게 된다.

lex.py와 yacc.py는 두개가 주로 동시에 사용되는데
lex.py에서 있는 token()함수는 입력파일에서 토큰을 리턴하게 된다.
yacc.py는 lex.py에서 받은 토큰을 가지고 grammar에 맞는지를 체크하면서 AST(Abstract Syntax Tree)를 작성하여 나간다.

하지만 AST를 어떻게 만들지는 전적으로 사용자에 달려 있다고 한다.
PLY는 컴파일러에서 가장 필수적인 lex와 yacc 기능만 제공한다고 보면 된다.