Lex

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

Lex컴퓨터 과학 분야에서 구문 분석을 위한 대표적인 프로그램이다. [1] Lex는 일반적으로 파서(Parser) 제작을 담당하는 Yacc와 함께 사용된다. Lex는 에릭 슈미트와 마이크 레스크가 만든 것으로, 대부분의 유닉스 시스템의 구문 분석 표준으로 사용되고 있고, 그 정의는 POSIX 표준에 명시되어 있다.

Lex는 구문 분석기를 읽어와서, Lexer를 만든 뒤 이를 C 언어로 만들어진 소스 코드의 형태로 출력한다.

Lex는 저작권이 있는 소프트웨어로 시작했지만, AT&T의 소스 코드에 기반하는 버전은 오픈 소스 정책을 따라 오픈 솔라리스 등에서 사용된다. 이외에도 유명한 오픈 소스 버전의 Lex로는 빠른 Lex(Fast Lex)라는 의미의 flex가 존재한다.

Lex 파일의 예[편집]

/*** Definition section ***/

%{
/* C code to be copied verbatim */
#include <stdio.h>
%}

/* This tells flex to read only one input file */
%option noyywrap

%%
    /*** Rules section ***/

    /* [0-9]+ matches a string of one or more digits */
[0-9]+  {
            /* yytext is a string containing the matched text. */
            printf("Saw an integer: %s\n", yytext);
        }

.|\n    {   /* Ignore all other characters. */   }

%%
/*** C Code section ***/

int main(void)
{
    /* Call the lexer, then quit. */
    yylex();
    return 0;
}

입력이 flex에 제공되면 C 파일 lex.yy.c로 변환된다. 정수의 문자열과 일치하여 출력하는 실행 파일로 컴파일된다. 이를테면 아래와 같이 입력하면:

abc123z.!&*2gj6

프로그램은 다음과 같이 출력한다:

Saw an integer: 123
Saw an integer: 2
Saw an integer: 6

각주[편집]