2008년 01월 11일
LEX, YACC 프로그램 작성 방법 (Parser Generator와 Visual Studio .NET으로 프로그램작성 및 실행하기) - Windows용 ALEX & YACC 프로그램의 사용 법을 설명한다. 이 프로그램을 download하여 사용하십시오. 설치는 모든 것을 기본으로 C:드라이브에 설치하시오.
- Visual Sutdio .NET을 실행
- 프로젝트 생성
- [파일]>[새로만들기]>[프로젝트]
- [새프로젝 트] 대화상자
프로젝트 형식 : [Visual C++ 프로젝트] 템플릿 :[Win32 프로젝트]
이름 : TestLex 위치 : D:\Compiler
[확인] - [WIn32 응용 프로그램 마법사 - TestLex] 대화상자
[응용 프로그램 설정] 응용 프로그램 종류 : [콘솔응용프로그램] 추가옵션 : [빈프로젝트] [마침]
- 디렉토리(포함, 라이브러리,소스) 환경설정
- [도구]>[옵션]
- [옵션] 대화상자
[프로젝트]>[VC++ 디렉토리] 플랫폼 : Win32 다음 파일의 디렉토리 표시 : [포함파일] '줄추가', '새로만들어진 라인클릭' ,'파일찾기버튼 클릭', [c:\ParGen\INCLUDE] 선택 다음 파일의 디렉토리 표시 : [라이브러리 파일] '줄추가', '새로만들어진 라인클릭' ,'파일찾기버튼 클릭', [c:\ParGen\ILIB\MSDEV] 선택 다음 파일의 디렉토리 표시 : [소스파일] '줄추가', '새로만들어진 라인클릭' ,'파일찾기버튼 클릭', [c:\ParGen\SOURCE] 선택 - [확인]
- 라이브러리 연결
- 솔루션 탐색기의 프로젝트 [TestLex]선택
- 속성창의 [속성페이지 버튼] 클릭
- [TestLex 속성 페이지] 대화상자
- 구성 : 활성[Debug] 플랫폼 : 활성[Win32]
[구성속성]>[C/C++]>[전처리기] 전처리기 정의 : YYDEBUG을 추가한다. [구성속성]>[링커]>[입력] 추가종속성 : yld.lib 을 추가한다.
- 구성 : [Release] 플랫폼 : [Win32]
[구성속성]>[링커]>[입력] 추가종속성 : yld.lib 입력을 추가한다. - [확인]
- Parser Generator로 Text1.l 작성하고 컴파일하기
- Parser Generator 실행
- [File]>[new]
- lex program Text1.l 작성
%{ /* * 단어 yjkim의 횟수와 글자의 수를 세어서 출력하는 예제 * 키보드로 입력하고 화일을 종료시키면(Ctrl z) * 입력된 단어 yjkim과 글자의 수를 세어서 출력한다.? * yylex()는 LEX 컴파일러가 만들어내는 함수로 * 입력이 종료되면 실행이 종료된다. */ int cnt=0, c=0; %}
%% yjkim {cnt++;c+=5;} . {c++;}
%%
main() { yylex(); printf("count of 'yjkim' : %d\n",cnt); printf("count of chatacters : %d\n",c); } - [File] > [Save as]
- [File Save As] 대화상자
폴더 :D:\Compiler\TestLex 프로젝트의 디렉토리에 저장 파일이름 : Text1.l [저장] - 컴파일
[Project] > [Compiler File] Text1.c, Text1.h파일이 프로젝트의 디렉토리에 생성된다.
- TestLex 솔루션에 파일 추가
- 소스파일 Text1.c 솔루션에 추가
- [솔루션 탐색기]의 [소스파일]을 선택하고 마우스의 오른쪽버튼 클릭
- [추가]>[기존항목추가]>[Text1.c]
- 헤더파일 Text1..h 솔루션에 추가
- [솔루션 탐색기]의 [헤더파일]을 선택하고 마우스의 오른쪽버튼 클릭
- [추가]>[기존항목추가]>[Text1.h]
- 빌드
- [빌드]>[TestLex 빌드]
- 실행
- [디버그]>[디버깅하지 않고 시작]
- 텍스트입력 및 실행결과
yjkim dfg
^Z count of 'yjkim' : 1 count of chatacters : 9 Press any key to continue
|
출처 : 한밭대학교 김윤중 교수님 홈페이지
# by 개념상실 | 2008/01/11 10:33 | 트랙백 | 덧글(0)