Lex와 Yacc을 이용한 Calculator 구현

Slides:



Advertisements
Similar presentations
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Advertisements

.Net History. Visual Studio.Net 2002 /.Net Framework 1.0 제품의 버전 / 특징 2002 년 - Visual Studio.Net 2002 /.Net Framework 1.0 첫 통합 개발 환경 - C# 언어 등장 (C# 1.0)
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
기초C언어 제1주 실습 강의 소개, C언어 개요, Cygwin/Eclipse 사용 컴퓨터시뮬레이션학과 2016년 봄학기
Term Project iTUTOR를 이용한 PIC 동작 검증 보고서와 모든 소스코드 압축하여 제출
YACC 응용 예 Desktop Calculator.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Image & Video processing
Power Java 제3장 이클립스 사용하기.
1. 컴파일러 개론 1-1. Compiler 정의 1-2. Language Processing System
Cross Compiler를이용한 커널 컴파일 및 포팅 1
제 8 장  파서 생성기 YACC 사용하기.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
Power Java 제2장 자바 개발 도구.
C 언어 1 1주차 C언어 시작하기 - 1차시 C 언어 특징 및 프로젝트 생성 Programming Language.
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
QT 프로그래밍 발표: 김래영.
Ubiquitous Computing Practice - Part I (Installation) -
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
임베디드 시스템 개론 크로스 플랫폼 설치 2일차 강의 자료 Embedded System Lab.
Java 기초 (Java JDK 설치 및 환경설정)
한국골프대학 종합정보시스템 Windows Vista 사용자를 위한 Component 설치안내서
한국골프대학 종합정보시스템 Windows 7 사용자를 위한 Component 설치안내서
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
25강. Security-I 보안 관련 프로젝트 생성 보안 관련 라이브러리 추가 보안 관련 설정 파일 만들기
Root Filesystem Porting
C / C++ Programming in multi platform
Visual Basic .NET 처음 사용하기.
1. C++ 시작하기.
Root Filesystem Porting
22강. 파일 업로드 - 파일 업로드 라이브러리 설치 - 파일 업로드 프로그래밍 Lecturer Kim Myoung-Ho
ARM Development Suite v1.2
Lex와 Yacc을 이용한 Calculator 구현
Cross Compiler 설치.
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
Android studio로 Application 만들기.
Cross Compiler를이용한 커널 컴파일 및 포팅
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
2장. JSP 프로그래밍을 위한 환경구성 제2장.
Device Driver 임베디드 시스템 I.
개발 환경 세팅.
영상처리 실습 인공지능연구실.
ASP.NET AJAX / AJAX Control Toolkit 응용 2008 컴퓨터공학실험( I )
자바 5.0 프로그래밍.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
컴퓨터 개론 및 실습 1주차 2015년 03월 05일.
Term Project 수행 안내 2011년 2학기 컴파일러.
PMIS 서버 설정 환경설정 작성자 : 배경환.
빌드 성공.
4. 어휘 분석(Lexical analysis)
( Windows Service Application Debugging )
학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성. 학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성.
OpenCV 설정 2.21 만든이 딩딩.
STS 또는 Eclipse 에서 프로젝트를 Export 하고 Import 하는 방법
05. General Linear List – Homework
StyleCop 소개 SGS Framework 개발 팀.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
슬라이드 쇼의 설정 슬라이드 쇼의 실행 파일과 폴더의 관리 글꼴을 포함해서 저장 웹 페이지로 게시 압축 파일
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
숙제 작성 및 제출 과정 김진하 2008/03/14.
Docker Study 6~7.
7 생성자 함수.
1장. C Language Synopsis.
J2SE 설치 부산대학교 인공지능 연구실.
Presentation transcript:

Lex와 Yacc을 이용한 Calculator 구현 부산대학교 정보∙컴퓨터 공학 전공 2009-2학기 컴파일러 2009.09.22

intermediate code generator The rest of process intermediate code generator source program target program semantic analyzer syntax analyzer lexical analyzer code optimizer code generator error handler symbol-table manager ‘Lex’를 이용하여 생성 ‘Yacc’ 을

Lex를 이용한 lexical analyzer 생성(1/3)

Lex를 이용한 lexical analyzer 생성 (2/3) Lex의 input specification 정의, 규칙, 사용자 부프로그램의 세 부분으로 이루어 짐. 각 부분을 구별하는 구분자로 %% 를 사용. 정의절 lexer 안에서 lex가 사용할 옵션을 처리하는 부분. 일반적으로 lexer가 작동하는 실행 환경을 설정. lexer 안으로 그대로 복사되는 C 코드는“%{”과 “%}”로 둘러쌈. 정의는 규칙 부분에서 사용됨. 규칙절 lexer의 기능을 지정하는 패턴과 동작을 담고 있는 부분. reguiar expression(패턴)과 그것과 매칭되었을 때 실행되는 동작 코드로 이루어 짐.

Lex를 이용한 lexical analyzer 생성 (3/3) 사용자 부프로그램 동작 코드를 작성할 때 사용되는 부프로그램들을 정의하기 위한 곳으로 lex의 출력인 lex.yy.c에 그대로 복사. 반드시 입력의 끝을 만났을 때 처리를 해야하는 yywrap() 함수를 작성해야 함.

Yacc을 이용한 Syntax Analyzer 생성(1/2)

Yacc을 이용한 Syntax Analyzer 생성(2/2) 사용자가 정의한 문법을 받아들여 그 문법에 맞는 “문장(sentences)”을 인식하는 syntax analyzer(parser) 생성 Yacc의 input specification lex와 마찬가지로 정의, 규칙, 사용자 부프로그램으로 이루어 짐. 정의 문법에서 사용하는 토큰에 대한 선언, 생성된 parser 내부의 스택에서 사용되는 다양한 값의 타입들을 담고 있음. 규칙 parser를 위한 문법을 담고 있음 사용자 부프로그램 Yacc이 생성하는 parser에 그대로 복사되는 C 코드를 담고 있음.

lex와 yacc의 결합

Lex와 Yacc을 이용한 Calculator 구현 Yacc이 생성할 parser에 토근을 제공하기 위한 lex %{ #include “calc.tab.h” extern int yylval; %} %% [0-9]+ { yylval = atoi(yytext); return NUMBER;} [ \t]; \n return 0; \. return yytext[0]; 정의 패턴 동작 규칙

Lex와 Yacc을 이용한 Calculator 구현 Calculator 문법을 가진 Yacc input specification %token NAME NUMBER %left '-' '+' %left '*' '/' %nonassoc UMINUS %% statement: NAME '=' expression | expression { printf("= %d\n", $1); } ; expression: expression '+' expression { $$ = $1 + $3; } | expression '-' expression { $$ = $1 - $3; } | expression '*' expression { $$ = $1 * $3; } | expression '/' expression {if($3 == 0) yyerror("divide by zero"); else $$ = $1 / $3; } | '-' expression %prec UMINUS { $$ = -$2; } | '(' expression ')' { $$ = $2; } | NUMBER { $$ = $1; } 정의 규칙

Lex/Yacc 사용법 – Visual Studio.NET 2005 Parser Generator 설치 pargen.zip 의 압축을 푼다. [DISK1]의 설치 파일을 실행한다. 라이브러리 libcd.lib 을 C:\ParGen\LIB\MSDEV 폴더에 저장한다.

Lex/Yacc 사용법 – Visual Studio.NET 2005 응용 프로그램 종류: 콘솔 응용 프로그램 추가옵션: 빈프로젝트

Lex/Yacc 사용법 – Visual Studio.NET 2005 디렉토리 (포함, 라이브러리, 소스) 환경설정 [도구] > [옵션] 디렉터리 표시: [포함 파일] [c:\ParGen\INCLUDE] 추가 디렉터리 표시: [라이브러리] [c:\ParGen\LIB\MSDEV] 추가 디렉터리 표시: [소스파일] [c:\ParGen\SOURCE] 추가

Lex/Yacc 사용법 – Visual Studio.NET 2005 프로젝트 환경 설정 [구성속성] > [C/C++] > [전처리기] : YYDEBUG 추가 [구성속성] > [링커] > [입력] : 추가종속성에 yld.lib 추가

Lex/Yacc 사용법 – Visual Studio.NET 2005 Parser generator로 컴파일 [Project] > [Compile File] 로 calc.y 컴파일. calc.c와 calc.h가 생성됨. calc.c -> calc.tab.c, calc.h -> calc.tab.h로 파일명 변경 lex 컴파일 결과와의 중복을 피하기 위해 변경 calc.tab.h는 lex에서 이용 [Project] > [Compile File] 로 calc.l 컴파일.

Lex/Yacc 사용법 – Visual Studio.NET 2005 calc.c, calc.h, calc.tab.c, calc.tab.h를 프로젝트에 추가 빌드 후 실행

기타 Visual Studio 2003 환경에서도 동일. Lex와 Yacc의 종류는 매우 많음. 기타 문의 사항이 있을 경우 GNU Bison & Flex : win32용도 있음, 소스 코드 개방. Abraxas Yacc & Lex : MS-DOS용 Pclex와 Pcyacc 포함. 기타 문의 사항이 있을 경우 인공지능 연구실 김민호 전화: 510-2875 E-mail: karma@pusan.ac.kr Lex와 Yacc에 대한 자료는 웹에 많이 있으므로 여러가지 자료를 참고한다면 어렵지 않을 것임