티스토리 뷰

컴파일러 - regex와 cfg

lex 예제 (2)

plas 2019. 10. 27. 17:05

이번에는 좀 다른 형태의 예제를 살펴보자. 입력파일에서 "Harry"라는 부분을 모두 찾아 그 나온 회수를 괄호로 보여주는 어휘분석기를 만들려고 한다. 이것은 일종의 입력에 대한 변환이라고 볼 수 있다. 기본적으로 입력파일과 출력파일은 실행명령에서의 파이프라인 리디렉션으로 처리하려고 한다. 그러므로 표준입력과 표준출력으로 입출력하면 된다. (파워쉘에서는 < 리디렉션이 허용되지 않음)

%option noyywrap
%{
	#include<stdio.h>
	int count=0;
%}

%%
Harry	{ 
		++count;
		printf("%s(%d)", yytext, count);
	}
%%

 이 코드는 놀라울 정도로 간단하다. 회수 변수의 증가와 harry 문자열 출력이 전부다. 여기서 규칙부에 .에 대한 규칙은 기술하지 않았음을 주의해서 보기 바란다. 우리가 규칙에서 기술하지 않은 모든 문자는 디폴트로 ECHO라는 액션이 수행된다. 이것은 입력을 그대로 표준출력에 내보내라는 것이다.

이 렉스 입력에 의해 생성된 어휘분석기가 입력파일에 대해 수행하는 결과는 다음에서 확인해 볼 수 있다. (입력파일 azkaban.txt,  출력파일 output.txt)

azkaban.txt
0.06MB
output.txt
0.06MB

이 프로그램을 실행해 보면 렉스의 강점을 느낄 수 있다. 상당히 큰 파일임에도 불구하고 입력과 출력이 거의 실시간으로 떨어진다. 이것은 파이썬은 물론 자바와 비교해도 상당히 빠른 속도다. 순수 C 언어로 짜져 있는 가벼운 도구라는 점이 렉스의 큰 장점이다. 이것은 대용량의 빅데이터 처리에서 렉스가 선택받는 이유이다. 센서나 서버 상의 로그 등 엄청난 속도로 쏟아져 들어오는 데이터를 실시간으로 처리하기 위해서는 이런 성능이 필수적이다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함