EA0015: 컴파일러

Similar documents
EA0015: 컴파일러

商用

3장 어휘분석

컴파일러

chap7.key

Microsoft PowerPoint - [2009] 02.pptx

lex-yacc-tutorial.hwp

C++-¿Ïº®Çؼ³10Àå

슬라이드 1

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - chap12-고급기능.pptx

PowerPoint 프레젠테이션

본 강의에 들어가기 전

우리나라의 전통문화에는 무엇이 있는지 알아봅시다. 우리나라의 전통문화를 체험합시다. 우리나라의 전통문화를 소중히 여기는 마음을 가집시다. 5. 우리 옷 한복의 특징 자료 3 참고 남자와 여자가 입는 한복의 종류 가 달랐다는 것을 알려 준다. 85쪽 문제 8, 9 자료

상품 전단지

::: 해당사항이 없을 경우 무 표시하시기 바랍니다. 검토항목 검 토 여 부 ( 표시) 시 민 : 유 ( ) 무 시 민 참 여 고 려 사 항 이 해 당 사 자 : 유 ( ) 무 전 문 가 : 유 ( ) 무 옴 브 즈 만 : 유 ( ) 무 법 령 규 정 : 교통 환경 재

2

DBPIA-NURIMEDIA

화이련(華以戀) hwp

ÆòÈ�´©¸® 94È£ ³»Áö_ÃÖÁ¾

歯1##01.PDF

<5BC1F8C7E0C1DF2D31B1C75D2DBCF6C1A4BABB2E687770>

120229(00)(1~3).indd

01Report_210-4.hwp

<C3D1BCB15FC0CCC8C45FBFECB8AE5FB1B3C0B0C0C75FB9E6C7E D352D32315FC5E4292E687770>



교육 과 학기 술부 고 시 제 호 초 중등교육법 제23조 제2항에 의거하여 초 중등학교 교육과정을 다음과 같이 고시합니다. 2011년 8월 9일 교육과학기술부장관 1. 초 중등학교 교육과정 총론은 별책 1 과 같습니다. 2. 초등학교 교육과정은 별책

시험지 출제 양식

177

제주어 교육자료(중등)-작업.hwp

¸é¸ñ¼Ò½ÄÁö 63È£_³»Áö ÃÖÁ¾

<C3D6C1BE5FBBF5B1B9BEEEBBFDC8B0B0DCBFEFC8A C3D6C1BEBABB292E687770>

초등국어에서 관용표현 지도 방안 연구

6±Ç¸ñÂ÷

과 위 가 오는 경우에는 앞말 받침을 대표음으로 바꾼 [다가페]와 [흐귀 에]가 올바른 발음이 [안자서], [할튼], [업쓰므로], [절믐] 풀이 자음으로 끝나는 말인 앉- 과 핥-, 없-, 젊- 에 각각 모음으로 시작하는 형식형태소인 -아서, -은, -으므로, -음

untitled

민주장정-노동운동(분권).indd

<C0CEBCE2BABB2D33C2F7BCF6C1A420B1B9BFAAC3D1BCAD203130B1C72E687770>


E1-정답및풀이(1~24)ok

<C1B6BCB1B4EBBCBCBDC3B1E2342DC3D6C1BE2E687770>

< BDC3BAB8C1A4B1D4C6C75BC8A3BFDC D2E687770>

교사용지도서_쓰기.hwp

최우석.hwp

0429bodo.hwp

時 習 說 ) 5), 원호설( 元 昊 說 ) 6) 등이 있다. 7) 이 가운데 임제설에 동의하는바, 상세한 논의는 황패강의 논의로 미루나 그의 논의에 논거로서 빠져 있는 부분을 보강하여 임제설에 대한 변증( 辨 證 )을 덧붙이고자 한다. 우선, 다음의 인용문을 보도록

cls46-06(심우영).hwp

伐)이라고 하였는데, 라자(羅字)는 나자(那字)로 쓰기도 하고 야자(耶字)로 쓰기도 한다. 또 서벌(徐伐)이라고도 한다. 세속에서 경자(京字)를 새겨 서벌(徐伐)이라고 한다. 이 때문에 또 사라(斯羅)라고 하기도 하고, 또 사로(斯盧)라고 하기도 한다. 재위 기간은 6

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint 프레젠테이션

K&R2 Reference Manual 번역본

untitled

untitled

제1장 Unix란 무엇인가?

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

歯9장.PDF

Microsoft PowerPoint 웹 연동 기술.pptx

untitled

歯7장.PDF

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

chap7.PDF

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

슬라이드 1

PowerPoint 프레젠테이션

vi 사용법

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

중간고사

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

PowerPoint 프레젠테이션

1. 27 (token descriptions) (regular expressions), grep egrep.. C. 1),., C (expressions), (statements), (declarations), (blocks) (procedures). (parsing

슬라이드 1

BMP 파일 처리

3월-기획특집1-4

금오공대 컴퓨터공학전공 강의자료

< B5BFBEC6BDC3BEC6BBE E687770>

PowerPoint 프레젠테이션

<3130BAB9BDC428BCF6C1A4292E687770>

11민락초신문4호

untitled

PowerPoint 프레젠테이션


PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

제1절 조선시대 이전의 교육

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

사진 24 _ 종루지 전경(서북에서) 사진 25 _ 종루지 남측기단(동에서) 사진 26 _ 종루지 북측기단(서에서) 사진 27 _ 종루지 1차 건물지 초석 적심석 사진 28 _ 종루지 중심 방형적심 유 사진 29 _ 종루지 동측 계단석 <경루지> 위 치 탑지의 남북중심

새만금세미나-1101-이양재.hwp

??

652

歯 조선일보.PDF

PowerPoint 프레젠테이션

<33B1C7C3D6C1BEBABB28BCF6C1A42D E687770>

(3) Windows 운영체제에 GNU C 컴파일러와 Flex, Bison 설치하기 적용된 Windows 운영체제는 32비트용 Windows 7이나, 다른버전에서도유사할것으로본다. 먼저 GNU C 컴파일러를설치한다. 이것을설치하는편한방법중하나가유명한무료 C/C++ 프로

<C1DFB1DE2842C7FC292E687770>

96부산연주문화\(김창욱\)

???? 1


Transcription:

4 Flex

무엇을공부하나? " 어휘분석기 (lexical analyzer 혹은 scanner)" 는다음과같은과정을거쳐서프로그램된다. 1 토큰정의, 2 정규식으로표현, 3 NFA로변환, 4 DFA로변환, 5 프로그램작성 위과정은앞장에서배운바와같이기계적으로이루어질수있다. "Flex(Fast Lexical Analyzer)" 는컴파일러개발자를위하여위과정을자동으로처리해주는도구이다. Flex는 " 확장정규식 " 으로표현된토큰표현을읽어서이토큰을인식하는 " 어휘분석기 " 프로그램을생성한다. 4 Flex 4-2

강의내용 Flex 소개 Flex 파일모습 Flex 확장정규식 입력이 Pattern 과매치되는방식 주요 Flex 변수및함수 C-Minus 어휘분석기 교재 Kenneth C. Louden, Compiler Construction Principles and Practice, PWS Publishing Company, 1997. (2.6, A.1, A.4) V. Paxon, W. Estes and J Millaway, Lexical Analysis With Flex, Edition 2.5.35, The Regents of the University of California, 2008. (http://flex.sourceforge.net) 4 Flex 4-3

Flex 소개 Flex 는어휘분석기생성기 (lexical analyzer generator) 이다. Flex 는 flex 파일 (.l) 을읽어서 C 프로그램파일 lex.yy.c 를생성한다. Flex file 은확장정규식으로표현되는 pattern 과 C 코드의 list 로구성됨. 생성된프로그램 lex.yy.c 에는 C 언어함수 yylex() 가포함되어있고이함수가어휘분석작업을수행한다. 생성된프로그램 lex.yy.c 는일반 C 컴파일러에의하여컴파일된후 flex 라이브러리와링크되어 (-lfl 옵션사용 ) 수행파일인어휘분석기를생성한다 수행파일은수행하면서 flex file 에서정의한 pattern 과일치하는스트링이입력파일에서들어오면이식과쌍을이룬 C 코드를수행한다. 4 Flex 4-4

Flex 파일모습 Flex 파일은 %% 로구분되는 3 부분으로구성된다. %{ 1 2 3 #include, #define 및 C 언어변수선언 %} flex macro 정의 %% lexical rule ( 확장정규식 { C 코드 } 로구성 ) %% 사용자제공 C 함수 4 Flex 4-5

Flex 파일모습 - 보기 %{ #include <stdio.h> int lineno = 1; %} line.*\n %% {line} { printf("%5d %s",lineno++, yytext); } %% main() { yylex(); return 0; } 4 Flex 4-6

Flex 확장정규식 - 1/2 x match the character x. any character except newline [xyz] x or y or z [abj-oz] a or b or any letter from j to o or Z [^A-Z] any character except A to Z r* zero or more r's r+ one or more r's r? zero or one r (optional) r{4} 4 r's r{2,5} two to five r's {name} macro expansion "[xyz]\"foo" literal string [xyz]"foo 4 Flex 4-7

Flex 확장정규식 - 2/2 \x ANSI-C \x for a, b, f, n, r, t, v \0 NULL character (ASCII 0) \123 character with value octal 123 \x2a character with value hexadecimal 2a (r) r for high precedence rs r followed by s (concatenation) r s either r or s ^r r at the beginning of a line r$ r at the end of a line <<EOF>> end of file 4 Flex 4-8

입력이 Pattern 과매치되는방식 매치되는 pattern 찾기 입력파일을읽어가면서매치되는 pattern 이있는지를찾는다. 이때가장긴스트링으로매치되는 pattern 을찾는다. 만약매치되는 pattern 이두개이상이면 flex file 에서먼저나타나는 pattern 을선택한다. yytext 및 yyleng 변경 매치된 pattern 이선택되면입력스트링을전역변수 char *yytext 가가리키는곳에복사하고이스트링의길이를전역변수 int yyleng 에저장한다. Pattern 과쌍을이루는 C 코드의수행 매치된 pattern 과쌍을이루는 C 코드를수행한다. 만약매치되는 pattern 이없으면입력을출력파일로출력한다. 4 Flex 4-9

Flex 변수 주요 Flex 변수및함수 FILE *yyin - 입력파일. (default로 stdin) FILE *yyout - 출력파일. (default로 stdout) char *yytext - 현재매치된스트링이저장되는곳. int yyleng - yytext의길이. Flex 함수 int input(void) - 입력함수. int ECHO(void) - yytext를 yyout에출력. int yylex(void) - 어휘분석기함수. 4 Flex 4-10

C-Minus 어휘분석기 : 어휘 어휘 : lexeme(token) Keywords: void(void), int(int), if(if), else(else), while(while), return(return), input(input), output(output) Special symbols: +(PLUS), -(MINUS), *(MULTIPLY), /(DIVIDE), <(LT), <=(LE), >(GT), >=(GE), ==(EQ),!=(NE), =(ASSIGN),,(COMMA), ;(SEMICOLON), ((LPAR), )(RPAR), {(LBRACE), }(RBRACE), [(LBRACKET), ](RBRACKET) Other token: 변수 (ID) 숫자 (NUM) ID=(letter _)(letter digit _)* NUM=digit digit* Whitespaces: " ", "\t", "\r", "\n" Comments: "/*... */", "//... \n" 4 Flex 4-11

C-Minus 어휘분석기 : scanner.l %{ #define ACCEPT(x) \ { \ } printf("line=%i, token=%s, lexeme=\"%s\"\n", source_line_no, (char *)x, yytext); \ fflush(stdout); \ int source_line_no = 1; %% "void" "int"... {digit}{digit}*... %%... ACCEPT("VOID"); ACCEPT("INT"); ACCEPT("NUM"); %} digit [0-9] letter [a-za-z] int main(int argc, char *argv[]) {... yyin=fopen(argv[1], "r"); yylex(); return 0; } 4 Flex 4-12

C-Minus 어휘분석기 : Makefile scanner: scanner.c gcc -O -o scanner scanner.c -lfl scanner.c: scanner.l flex scanner.l mv lex.yy.c scanner.c 4 Flex 4-13

C-Minus 어휘분석기 : 수행 /********************************/ int gcd(int u, int v) { int g; if (v == 0) g = u; else g = gcd(v, u - u / v * v); return g; }... /********************************/ $ scanner gcd.c line=3, token=int, lexeme="int" line=3, token=id, lexeme="gcd" line=3, token=lpar, lexeme="(" line=3, token=int, lexeme="int" line=3, token=id, lexeme="u" line=3, token=comma, lexeme="," line=3, token=int, lexeme="int" line=3, token=id, lexeme="v" line=3, token=rpar, lexeme=")" line=4, token=lbrace, lexeme="{" line=5, token=int, lexeme="int" line=5, token=id, lexeme="g" line=5, token=semicolon, lexeme=";"... $ 4 Flex 4-14