[컴퓨터공학]C언어로 LEX구현
- 등록일 / 수정일
- 페이지 / 형식
- 자료평가
- 구매가격
- 2006.04.27 / 2019.12.24
- 1페이지 / (기타파일)
- 평가한 분이 없습니다. (구매금액의 3%지급)
- 1,500원
최대 20페이지까지 미리보기 서비스를 제공합니다.
자료평가하면 구매금액의 3%지급!
1
2
3
4
5
추천 연관자료
- 하고 싶은 말
-
C언어로 LEX구현하였습니다.
1.컴파일 방법
2.UNIX에서의 간단한 명령
3.vi 에디터에서의 간단한 명령
을 알아보고 LEX구현
- 본문내용
-
1.컴파일 방법
① lex 파일명 : lex.yy.c 가 생성됨
② cc lex.yy.c -o 생성될화일명 -ll : -o(생성될화일명을 지정할 수 있다)
: -ll(라이브러리 포함)
③ 생성된화일명 < 데이터화일명 : 데이터 파일은 직접 작성 해야 함
2.UNIX에서의 간단한 명령
① cp(카피명령) : cp 기존화일이름 복사될화일이름
: cp 기존화일이름 ../ssk/
② mv(파일이동) : mv ssk.l ggg.l(ssk.l 이 ggg.l 로 바뀐다.)
③ rm(삭제명령) : rm ssk.l(ssk.l을 삭제한다.)
④ pwd : 현재 디렉토리를 보여준다.
⑤ ls : 현재 디렉토리에 있는 파일들을 열거한다.
⑥ mkdir : mkdir ssk(ssk이라는 디렉토리를 생성한다.)
⑦ rmdir : rmdir ssk(ssk이라는 디렉토리를 삭제한다.)
⑧ cd .. : 한 단계 상위 디렉토리로 이동.
⑨ cd ssk : ssk 라는 디렉토리로 이동
3.vi 에디터에서의 간단한 명령
① ESC : 삽입이나 명령어 모드에서 탈출시 사용
② a : 커서 다음 위치에서 텍스트를 삽입
③ i : 커서 전 위치에 텍스트를 삽입,
④ h : 커서를 좌로 이동, j : 커서를 아래로 이동
k : 커서를 위로 이동, l : 커서를 우로 이동
⑤ x : 현커서위치의 문자 삭제
⑥ o : 커서가 있는 다음줄로 빈줄을 삽입, O : 커서가 있는 전줄로 빈줄을 삽입
⑦ dd : 현재 줄 삭제
⑧ esc키 → ":" → wq → enter키 : 저장하고 나감
⑨ esc키 → ":" → q → enter키 : 저장하지 않고 나감
⑩ esc키 → ":" → q! → enter키 : 수정된 내용을 무시하고 나감
⑪ vi 화일명 → enter키 → 편집 → ⑧과정 수행 (처음 vi 에디터에 들어가서 편집하고 저장하고 나오는 과정)
⑫ vi → enter키 → 편집 → esc키 → ":" → w 파일명 → enter키
----------ssk01.l------------------------------------------------------
%{
#include <stdio.h>
#include <stdlib.h>
enum tnumber { EOS, ID, INTEGER, REAL, NUMBER, ASSIGN, PLUS, MINUS,
MULTIPLY, IF, THEN, ELSE, WS, BLANK, LT,
SEMI, DOT, BEGN, END, ERROR};
%}
delim [\t\n]
ws {delim}+
letter [A-Za-z]
digit [0-9]
id {letter}({letter}|{digit})*
integer {digit}+
real {digit}+(\.{digit}+)?
number {digit}+(\.{digit}+)?(E[+\-]?{digit}+)?
%%
begin { return(BEGN); }
end { return(END); }
if { return(IF); }
then { return(THEN); }
else { return(ELSE); }
{id} { return(ID); }
{integer} { return(INTEGER); }
{real} { return(REAL); }
{number} { return(NUMBER); }
":=" { return(ASSIGN); }
"+" { return(PLUS); }
"-" { return(MINUS); }
"*" { return(MULTIPLY); }
";" { return(SEMI); }
"." { return(DOT); }
" " { return(BLANK); }
"<" { return(LT); }
. { return(ERROR); }
%%
main()
{
enum tnumber tn; /* token number */
int k;
float b;
printf("Start of Lex\n");
while((tn=yylex()) != EOS) {
자료평가
-
아직 평가한 내용이 없습니다.