3장 어휘분석

Similar documents
EA0015: 컴파일러

컴파일러

商用

PowerPoint 프레젠테이션


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

슬라이드 1

PowerPoint Presentation

untitled

EA0015: 컴파일러

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - PLT_ch04_KOR

PowerPoint 프레젠테이션

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

PowerPoint 프레젠테이션

슬라이드 1

C++ Programming

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

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

PowerPoint 프레젠테이션

슬라이드 1

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - chap-03.pptx

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

<B8AEC6F7C6AEBAE4BEEE20C0CEBCE2>

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Microsoft PowerPoint - chap06-2pointer.ppt

2 단어별로읽어들이기 WORDTREE 2 2. 단어별로읽어들이기. 먼저입력스트림으로부터단어를선별하는함수부터작성하겠습니다. getword ( ) 함수는주어진입력을단어별로다루기위해서, 입력스트림으로부터단어를빼내는함수입니다. 여기서단어란글자 (letter) 로시작하면서글자와

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

Microsoft PowerPoint 웹 연동 기술.pptx

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

lex-yacc-tutorial.hwp

강의10

Microsoft PowerPoint - Lesson2.pptx

PowerPoint 프레젠테이션

untitled

슬라이드 1

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

chap x: G입력

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

Microsoft PowerPoint - chap-02.pptx

Microsoft PowerPoint - 08_(C_Programming)_(Korean)_Preprocessing

BMP 파일 처리

K&R2 Reference Manual 번역본

Lab 3. 실습문제 (Single linked list)_해답.hwp

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

본 강의에 들어가기 전

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

歯9장.PDF

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

Microsoft PowerPoint APUE(Intro).ppt

C 언어와 프로그래밍 개요

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

n 정의 정규표현 (Regular Expression) n 정규문법 G 를대수학적인성질로표현 n 정규언어에속해있는스트링의모양을직접기술 n 정규문법은문법이나타내는언어의형태를체계적으로구하여정규표현으로나타낼수있음. 정규문법 (Regular ) 정규표현 (Regular ) 유

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - PL_03-04.pptx

03장.스택.key

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션


Microsoft PowerPoint - chap10-함수의활용.pptx

2014밝고고운동요부르기-수정3

2005프로그램표지

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

슬라이드 1

Microsoft PowerPoint - chap-06.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

형식 언어

PowerPoint Presentation

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint - Chapter_08.pptx

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

OCW_C언어 기초

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

Microsoft PowerPoint - chap06-1Array.ppt

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

ABC 2장

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap-02.pptx

Columns 8 through while expression {commands} 예제 1.2 (While 반복문의이용 ) >> num=0

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

4장.문장

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

OCW_C언어 기초

텀블러514

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

윤성우의 열혈 TCP/IP 소켓 프로그래밊

Transcription:

Video & Image VIPL Processing Lab. Compiler Construction 한국방송통신대학교컴퓨터과학과출석수업 제 2012-2 공학박사김명진 (HCI & 지능형로봇연구소 ) 숭실대학교연구교수

컴파일러교재구성 2장 : 형식언어와오토마타 3장 : 어휘분석 4장 : Contex-free 언어와푸시다운오토마타 5장 : 구문분석 2

어휘분석 어휘분석이란? 원시프로그램을읽어들여토큰이라는의미있는문법단위로분리하는것 원시프로그램 : If a 10 then 토큰 (token) : if, a,, 10, then 토큰번호 : 29, 1, 20, 2, 35 3

컴파일러구조 Source Program 어휘분석기 토큰 구문분석기 중간코드생성기 코드최적화기 목적코드생성기 4 트리 중간코드 Compiler Object Program

어휘분석기 소스프로그램 (S.P) 을문법적으로 의미있는최소단위로분할 원시프로그램 어휘분석기 일련의토큰 5

어휘분석기설계 토큰의종류 (1) 식별자 (identifier) (2) 상수 (constant) (3) 예약어 (reserved word) (4) 연산자 (operator) (5) 구분자 (delimiter) 6

start 1 A b l d < > : l d 2 32 52 53 54 55 not l d d not d > = not >,= = not =.. b=blank l=letter d=digit = not = not. 예약어표검색 39 43 42 40 41 44 46 51 45 33 숫자 not found A found = ( ) + * /,. ; 3 4 식별자 예약어 38 49 50 34 35 36 37 47 45 48 3장어휘분석

b 1 l l d 2 not l d not found 식별자 예약어표검색 3 d 32 d not d 33 숫자 found 4 예약어 8

start 56 57 58 15 R R A Y 59 60 61 7 B G I N 62 E 63 64 65 18 C S 66 A 67 68 E 23 O S 69 N 70 71 T 5 D V 72 I 73 13 O W N T O 25 74 75 76 29 E L E 31 77 S 78 22 N D 79 10 A A N D F 80 O 81 R 28 82 N 83 C 84 T I 85 O 86 87 N 17 I U 88 F 20 M 89 O 90 D 14 N 91 O 92 T 19 9

A O 93 F 8 R 16 P R T 94 R 95 O C 96 97 P H 114 E O 30 Y 116 P U N T 118 119 V 105 E 113 122 A W H 124 125 G E U 98 D 99 100 R 101 E R 102 103 A 104 M 4 O R C 106 107 108 109 D 9 R 123 11 I E A 110 111 112 26 N 115 21 E 117 6 I 120 121 L L 126 127 E 10 27 24 T 12

어휘분석기구현방법 프로그래밍언어를이용하여직접구현 컴파일러자동화도구를이용하여구현 어휘분석기생성기종류 LEX FLEX ScanGen PCLEX POISON JLEX 11

컴파일러생성기모델 Language Description : L Machine Description : M 컴파일러생성기 Program written in L 컴파일러 Executable form on M 12

어휘분석기생성기 LEX: 1975 년에 M.E.Leak 가고안 토큰을구분하는프로그램작성도구 원시프로그램 토큰구조 ( 정규표현 ) LEX 어휘분석기 (Scanner) 일련의토큰 13

PCLEX 소개 LEX LEX 의입력 원시프로그램 상태전이표를갖는어휘분석기 LEX 의역할 일련의토큰들 14

LEX 의기능 정규표현 (*.L) LEX 어휘분석용소스프로그램 (lex.yy.c) 컴파일 원시프로그램 어휘분석기 일련의토큰 15

LEX 입력명세서 사용형식 { 정의부분 } %% // 규칙시작표시, 생략불가능 { 규칙부분 } // 규칙부분 ::= 정규표현 + 수행코드 %% { 사용자부프로그램 } 16

LEX 정규표현 ::= 텍스트문자 + 연산자문자 텍스트문자 비교대상의스트링문자로알파벳과숫자 연산자문자 \ [] ^ -?. * + () $ / {} % <> 17

LEX 수행코드 정규표현이매칭되면즉, 토큰이인식되었을때실행해야할행동을 C언어로기술하는부분 수행코드구성 전역변수 함수 I/O 루틴 ( 입출력함수 ) 18

LEX 수행코드 전역변수 yytext 정규표현과매칭된실제문자열보관변수 [a-z]+ printf( %s, yytext); yyleng 매칭된문자열의길이를저장하는변수 yytext[yyleng-1] 매칭된스트링의마지막문자 19

LEX 수행코드 함수 yylex() LEX 입력에서명시한정규표현과일치하는토큰을찾을때까지한문자씩계속읽음 yymore() 현재매칭된문자열의끝에다음에인식될문자열을덧붙이는함수 20

LEX 수행코드 함수 yyless(n) n 개의문자만을 yytext 에남겨두고나머지는다시처리하기위해 input 으로되돌려보내는함수. yywrap() Lex 가입력의끝을만났을때호출하는함수. 정상인경우 : 함수복귀값은 1 21

LEX 수행코드 I/O 루틴 input() 입력스트림으로부터다음문자를읽는함수. output(c) 출력스트림으로문자 c 를내보내는함수 unput(c) input() 에의해읽혀지도록문자 c 를입력스트림으로되돌려보내는함수 22

LEX 활용사례 원시프로그램 (datafile) ABC := E * 314 + ABC / E ; 토큰 LIST(10 개 ) ABC, :=, E, *, 314, +, ABC, /, E, ; 23

LEX 활용사례 정의부분 %{ /* 생성된프로그램에그대로 copy 됨 */ #include <stdio.h> #include <stdlib.h> enum tnumber {TEOF, TIDEN, TNUM, TASSIGN, TADD, TPOINT, TMUL, TDIV, TSEMI, TDOT, TBEGIN, TEND, TERROR}; %} /* 이름n 치환식 */ letter [a-za-z] digit [0-9] 24

LEX 활용사례 규칙부분 %% begin return(tbegin); end return(tend); {letter}({letter} {digit})* return(tiden); := return(tassign); + return(tadd); * return(tmul); / return(tdiv); {digit}+ return(tnum); ; return(tsemi); \. return(tdot); [ \t\n] ;. return(terror); 25

LEX 활용사례 사용자부프로그램부분 %% main() { enum tnumber tn; /* token number */ printf( Start of LEX \n ); 숭실대학교 HCI& 지능형로봇연구소 교수김명진 ( 공학박사 ) while ((tn = yylex()!= TEOF) switch (tn) { case TBEGIN : printf( Begin \n ); break; case TEND : printf( End \n ); break; case TIDEN : printf( Identifier : %s\n, yytext); break; case TASSIGN : printf( Assign_op \n ); break; case TADD : printf( Add_op \n ); break; case TMUL : printf( Mul_op \n ); break; case TDIV : printf( Div_op \n ); break; case TNUM : printf( Number: %s\n, atoi(yytext)); break; case TSEMI : printf( Semicolon \n ); break; case TDOT : printf( Dot \n ); break; case TERROR : printf( Error \n ); break; } yywrap() {printf( End of LEX \=n ); return 1; } } 26

LEX 실행절차 LEX 명세 (TEST.L) LEX Lex.yy.c cc a.out PC 환경에서실행법 C > PCL32 -i TEST.L library C > cc -c -o test.c C > TEST < datafile 27

LEX 실행결과 datafile 실행결과 ABC := E * 314 + ABC / E ; Start of LEX Identifier : ABC Assign_op Identifier : E MUL_op Number : 314 Add_op Identifier : ABC DIV_op Identifier : E Semicolon End of LEX 토큰 10 개