본문 바로가기
컴퓨터공학/컴파일러(compiler)

lex 사용법

by 바코94 2019. 9. 22.

token을 자를 때 get_token() 과 같은 프로그램을 손수 작성할 수도 있다. 

int a ; 

위의 한 줄을 분석하기 위해선 `int`, `a`, `;` 세개의 토큰으로 잘라야한다.

이를 편하게 lex 프로그램을 사용하면 세 개의 토큰을 손쉽게 얻을 수 있다.

c언어로 "int a ;" 토큰으로 자르는 것을 만들어 보면 필요성을 느끼게 된다.

또한, c언어에서 분석할 토큰이 매우 많기 때문에 각 토큰을 잘 이해한 후에 lex를 잘 사용하는 것이 중요하다.

 

 

c언어는 recursive descent parsing 방법으로 컴파일러를 만들기에는 안되는 문법 사항들이 존재한다고 한다.

따라서 parsing table을 이용하는 LR Parsing 방법을 사용해야 한다.

이를 위해 yacc를 통해 production rule을 가지고 parsing table 및 필요한 코드를 생성해주는 방법을 이용한다.

이 때 어떤 토큰을 읽었는지 파악을 해야하기 때문에 lex를 사용하게 된다.

 

 

lex 사용법 

책 : lex & yacc - O'Reilly & Associates. Inc.

블로그 : https://wiki.kldp.org/KoreanDoc/html/Lex_Yacc-KLDP/Lex_Yacc-KLDP.html#toc1

 

1. lex파일 생성

% vi simple.l

 

2. lex를 c언어로 변환 -> lex.yy.c 파일 생성됨.

% lex simple.l

 

3. lex library 포함하여 컴파일

% cc lex.yy.c -o simple -ll

 

4. 실행( simple.l을 입력 텍스트로 주는 경우)

% ./simple < simple.l