(컴파일러) LEX를 이용한 ARROW Language Specification
본 자료는 5페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
해당 자료는 5페이지 까지만 미리보기를 제공합니다.
5페이지 이후부터 다운로드 후 확인할 수 있습니다.

본문내용

MMENT, T_LINKWORD, T_DATAINFORM, T_ACTIONWORD,
T_FRAMEWORD, T_RIGHTARROW, T_LEFTARROW, T_RLARROW,
T_ADD_MOP, T_SUB_MOP, T_MUL_MOP, T_DIV_MOP, T_GAB_MOP,
T_POW_MOP, T_FT_MOP, T_AND_LOP, T_OR_LOP, T_EQ_LOP,
T_NOT_LOP, T_BIG_LOP, T_LESS_LOP, T_BLKSEPA, T_UNRECOG,
T_DONTCARE, T_EOT };
%}
DIGIT [0-9]
LETTER [_a-zA-Z]
%%
-?{DIGIT}+ return(T_INT);
-?{DIGIT}+"."{DIGIT}+ return(T_FLOAT);
\"[^\"\n]*\" return(T_TEXT);
true|false return(T_BOOL);
"#".* return(T_COMMENT);
using return(T_LINKWORD);
int|float|text|bool return(T_DATAINFORM);
assign|variable|function|eval|compare|call|return return(T_ACTIONWORD);
declare|execute|terminate return(T_FRAMEWORD);
{LETTER}({LETTER}|{DIGIT})* return(T_IDENTIFIER);
"->" return(T_RIGHTARROW);
"<-" return(T_LEFTARROW);
"<->" return(T_RLARROW);
"+" return(T_ADD_MOP);
"-" return(T_SUB_MOP);
"*" return(T_MUL_MOP);
"/" return(T_DIV_MOP);
"%" return(T_GAB_MOP);
"^" return(T_POW_MOP);
"~" return(T_FT_MOP);
"&" return(T_AND_LOP);
"|" return(T_OR_LOP);
"=" return(T_EQ_LOP);
"!" return(T_NOT_LOP);
"<" return(T_BIG_LOP);
">" return(T_LESS_LOP);
"@@" return(T_BLKSEPA);
[\t\n ]+ return(T_DONTCARE);
. return(T_UNRECOG);
%%
int main(int argc, char *argv[])
{
enum token tk;
char explain[24][27] = {
"Comment",
"Link Keyword",
"Data Information keyword",
"Action Keyword",
"Frame Keyword",
"Right Arrow-Operator",
"Left Arrow-Operator",
"Right-Left Arrow-Operator",
"Add Math-Operator",
"Subtract Math-Operator",
"Multiply Math-Operator",
"Divide Math-Operator",
"Remain Math-Operator",
"Square Math-Operator",
"From-To Math-Operator",
"AND Logic-Operator",
"OR Logic-Operator",
"EQUAL Logic-Operator",
"NOT Logic-Operator",
"Bigger-than Logic-Operator",
"Lesser-than Logic-Operator",
"Block Separator",
"Unrecognized Character",
};
argv++;
argc--;
if(argc>0)
yyin = fopen(argv[0],"r");
else
yyin = stdin;
puts("=====================================================");
while( (tk=yylex()) != T_EOF)
{
switch(tk)
{
case T_INT:
printf("%8s\t:\tInteger(%d, %d)\n",yytext,tk,atoi(yytext));
break;
case T_FLOAT:
printf("%8s\t:\tFloat(%d, %f)\n",yytext,tk,atof(yytext));
break;
case T_TEXT:
printf("%8s\t:\tText(%d, %s)\n",yytext,tk,yytext);
break;
case T_BOOL:
printf("%8s\t:\tBool(%d, %s)\n",yytext,tk,yytext);
break;
case T_IDENTIFIER:
printf("%8s\t:\tIdentifier(%d, %s)\n",yytext,tk,yytext);
break;
case T_COMMENT:case T_LINKWORD:case T_DATAINFORM:
case T_ACTIONWORD:case T_FRAMEWORD: case T_RIGHTARROW:
case T_LEFTARROW:case T_RLARROW:case T_ADD_MOP:
case T_SUB_MOP:case T_MUL_MOP:case T_DIV_MOP:case T_GAB_MOP:case T_POW_MOP:case T_FT_MOP:
case T_AND_LOP:case T_OR_LOP:case T_EQ_LOP:case T_NOT_LOP:case T_BIG_LOP:case T_LESS_LOP:
case T_BLKSEPA:case T_UNRECOG:
printf("%8s\t:\t%s(%d, 0)\n",yytext,explain[tk-6],tk);
break;
case T_DONTCARE:
break;
}
}
puts("=====================================================");
return 0;
}
3. 3 실행 결과
2.1 예시를 해당 어휘 분석기를 통해 실행시킨 결과이다.
출력 결과는 2.1 예시 전체에 대한 내용이며. 역할별로 분류된 키워드와 연산자들, 식별자와 주석, 블록 분리자들에 대한 토큰 분리가 이루어지고 있음을 알 수 있다.

키워드

  • 가격무료
  • 페이지수15페이지
  • 등록일2010.02.01
  • 저작시기2008.7
  • 파일형식한글(hwp)
  • 자료번호#579754
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니