CS/프로그래밍 언어론

[프로그래밍 언어론] Lex

윤곰이 2024. 4. 27. 22:42
학교에서 들은 프로그래밍 언어론 강의 내용을 복습하면서 작성한 글입니다.
April 12, 2024 12:56 PM
  1. Scanner: Text의 어휘 패턴을 인식하는 프로그램
    token: 입력을 나눈 의미있는 단위

  2. Lex 구조
%{
	//정의절
	#include <stdio.h>
	int count = 0;
%}

//여기에 패턴 단순화를 위한 변수 선언 가능
//예: DIGIT [0-9]
//사용시 {[0-9]}+ 대신 {DIGIT}+ 가능

%%
	//규칙절: 입력된 문자에서 매칭되는 패턴과 패턴이 나타났을 때 해당하는 동작
	([0-9])+   {count++;}
	\n     ;
%%

//사용자 서브루틴절
int main(){
	yylex();
	return 0;
}

int yywrap(){
	return 1;
}

 

  • 규칙절 속 패턴(정규표현식)
    • 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어
    • 먼저 작성된 규칙이 먼저 선택 → 더 명시적으로 작성된 규칙이 상위에 있어야함
    • 정의절에서 선언한 변수 사용 가능
  • 규칙절 속 연산부
    • C 코드 사용 가능
    • 명시적 처리가 없으면 default로 echo 반환

 

사용자 서브루틴절

  • Lex 함수
yylex(): 스캐너 함수
yywrap(): yylex()가 EOF를 만나면 호출
yymore(): 인식된 토큰의 문자열을 yytext 뒤에 첨가
input(): 다음 문자 반환
output(c): 문자 c를 출력으로
unput(c): 문자 c를 입력으로