Lex

위키백과, 우리 모두의 백과사전.
둘러보기로 가기 검색하러 가기
Lex
원저자마이크 레스크, 에릭 슈미트
발표일1975년 (44년 전)(1975)
저장소 위키데이터에서 편집하기
운영 체제유닉스, 유닉스 계열
종류명령어

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

각주[편집]