컴파일러 Lex

18 Mar 2019 - breadkey

Lex

Lexcial Analyzer는 소스 코드에서 lexeme을 골라내 이 들을 keyword, operator, identifier등으로 나눈 토큰으로 만든다.
 
Lecial Analyzer를 구현하는 방법은 Hand-written, regular expression으로 패턴을 기술하고 패턴대로 토큰을 만드는 Pattern-directed 방법이 있다.

Pattern-directed 방식으로 구현한 것이 lex이다.

Lex의 구조

Lex는 다음 두가지를 포함한다.

  • Lex compiler
  • Lex language

Lex는 Lex 언어로 작성된 소스 코드(*.l)를 Lex 컴파일러 c코드(lex.yy.c)로 컴파일한다.

Lex 소스 코드

definitions 변수, 상수, 정의 등을 선언한다
%%
rules
regular expression과 action으로 이루어진다
%%
auxiliary procedures
action에 필요한 procedure들로 이루어진다

생성된 Lexical Analyzer

컴파일을 통해 lex.yy.c 라는 Lexcial Analyzer가 생성된다.

yylex()

lex.yy.c가 가지게 되는 스캐닝 루틴이다.

  • global input file(기본은 stdin)에서부터 토큰을 스캔한다.
  • EOF를 만나거나 return을 수행할 때 까지 계속된다.
  • return을 수행함으로써 종료된다면 스캐너는 다시 불러질 수 있으며 스캐닝을 재개할 수 있다.
  • yylex()는 EOF에서 0을 반환하며 나머지 경우에는 action routine에 정의된 값을 반환한다.
tag: compiler

Related Posts