메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

Lex와 Yacc을 이용하여 구문 분석기 만들기

Martin Brown, 자유기고가, IT 컨설턴트/프리랜서 작가
Martin Brown은 8년 넘게 기술 필자로 활약해왔다. Brown은 다양한 주제를 다루는 수 많은 책을 집필했고 기사를 작성했다. Brown은 펄, 파이썬, 자바(Java™), 자바스크립트, 베이직, 파스칼, 모듈라-2, C, C++, 레볼, gawk, 셸 스크립트, 윈도우(Windows®), 솔라리스, 리눅스, BeOS, 맥 OS X을 비롯하여 웹 프로그래밍, 시스템 관리, 통합에 이르리까지 다양한 개발 언어와 플랫폼을 경험했다. Brown은 마이크로소프트(Microsoft®) SME(Subject Matter Expert)이며 ServerWatch.com, LinuxToday.com, IBM developerWorks에 주기적으로 기고한다. Brown은 또한 컴퓨터월드, 애플 블로그, 기타 사이트에 주기적으로 블로그 기사를 올린다. 연락 주소는 Brown이 운영하는 웹 사이트를 참조하기 바란다.

요약:  이 튜토리얼에서는 lex/flex와 yacc/bison을 이용하여 구문 분석기를 만들어 봅니다. 먼저, 간단한 계산기를 구현하면서 기본 원리를 익힙니다. 그런 다음, 같은 원리를 적용하여 텍스트 구문 분석기를 제작합니다. 텍스트 구문 분석, 즉 텍스트에서 주요 정보를 판독하여 추출하는 기능은 많은 프로그램에서 중요한 역할을 수행합니다. 예를 들어, 유닉스(UNIX®) 운영체제에서는 셸, awk, 펄 등과 같은 도구와 명령에서 소프트웨어와 응용 프로그램을 빌드하기 위해 사용하는 C 컴파일러에 이르기까지 많은 구성요소가 텍스트 구문 분석을 수행합니다. 그뿐만 아니라, 프로그래머는 자신의 유닉스 응용 프로그램에서 구문 분석기를 사용해 간단한 구성 파일을 분석하거나 궁극적으로는 자신만의 프로그래밍 언어도 설계할 수 있습니다.

원문 게재일:  2008 년 5 월 06 일
난이도:  중급

페이지뷰: 9986 회
의견: 

시작하기 전에

유닉스(UNIX®) 플랫폼에서 프로그램을 짜다 보면 일정한 형식을 따르는 텍스트나 구조를 자주 접한다. 프로그램에서 이러한 텍스트나 구조를 인식하려면 형식에 맞춰 텍스트를 분석하는 구문 분석기가 필요하다. 이 때 lex와 yacc을 사용하면 손쉽게 구문 분석 엔진을 만들 수 있다. 또한 이렇게 제작한 구문 분석 엔진을 프로그램에 접목하여 간단한 구성 파일을 분석하거나 심지어 자신만의 프로그래밍 언어까지 설계할 수 있다. 이 튜토리얼에서는 어휘 요소를 정의하는 방법, yacc 규칙을 작성하는 방법, 규칙 메커니즘을 사용해 다양한 구문 분석 엔진을 정의하고 제작하는 방법을 다룬다.

튜토리얼 개요

유닉스 플랫폼에서 텍스트를 판독하여 추출하는 방법은 많다. grep, awk, 펄 등 다양한 도구와 명령이 존재한다. 그런데 때로는 유연하면서도 구조적인 자료를 판독해 추출할 필요가 생긴다. 여기서 lex와 yacc이 진가를 발휘한다. awk, 펄, 셸, 기타 프로그래밍 언어 다수도 lex와 yacc으로 만든 구문 분석 엔진을 사용해 텍스트를 해석하고 이해하고 필요에 따라 자료 구조나 정보 구조에 맞게 변환한다.

lex는 어휘 분석기를 만들어 주는 도구로, 어휘 분석기는 주어진 텍스트에서 구조적인 방식으로 특정한 문자열을 식별한다. yacc은 문법 해석기를 만들어 주는 도구로, 일련의 어휘에서 처리를 위한 구조적인 형식(문법)을 인식한다.

이 튜토리얼에서는 먼저 계산기를 구현하면서 lex/yacc 사용법을 익힌다. 계산기 예제에서 lex와 yacc이 내놓는 정보를 좀 더 상세히 검토한 후 계산기를 확장하여 텍스트 구문 분석기를 만들어 본다.


필요한 도구

이 튜토리얼에서 제공하는 예제를 실행하려면 다음 도구가 필요하다.

  • lex: 대다수 유닉스 운영체제에서 표준으로 제공하는 도구다. GNU flex 도구도 같은 기능을 수행한다.
  • yacc: 대다수 유닉스 운영체제에서 표준으로 제공하는 도구다. GNU bison 도구도 같은 기능을 수행한다.
  • C 컴파일러: GNU CC를 포함하여 표준 C 컴파일러면 충분하다.
  • make 도구: 예제 Makefile을 실행하려면 make 도구가 필요하다. make 도구와 Makefile을 사용하면 빌드가 쉬워진다.

GNU 도구는 GNU 웹 사이트나 지역 미러 사이트에서 내려 받는다.

18 | 다음

의견



static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=AIX와 UNIX
ArticleID=306339
TutorialTitle=Lex와 Yacc을 이용하여 구문 분석기 만들기
publish-date=05062008
author1-email=mc@mcslp.com
author1-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.