/* 学籍番号:05T5018B 名前  :カイルン ニサク 実行結果: 予約語 = 417 算術演算子 = 111 記号 = 647 関係演算子 = 99 代入演算子 = 199 数字 = 281 識別子 = 1435 */ %{ int tNumber; int tIdent; int tReservedWord; int tOperator; int tSymbol; int tAssignmentOperator; int tComparativeOperator; %} DIGIT [0-9] ALPHA [a-zA-Z] OPERA [+*/\-] SYM [.,;|] %% "begin" {printf("%s ", yytext); tReservedWord++;} "call" {printf( "%s ", yytext); tReservedWord++;} "const" {printf( "%s ", yytext); tReservedWord++;} "do" {printf( "%s ", yytext); tReservedWord++;} "else" {printf( "%s ", yytext); tReservedWord++;} "end" {printf( "%s ", yytext); tReservedWord++;} "if" {printf( "%s ", yytext); tReservedWord++;} "odd" {printf( "%s ", yytext); tReservedWord++;} "procedure" {printf( "%s ", yytext); tReservedWord++;} "then" {printf( "%s ", yytext); tReservedWord++;} "var" {printf( "%s ", yytext); tReservedWord++;} "while" {printf( "%s ", yytext); tReservedWord++;} ">" {printf( "gt "); tComparativeOperator++;} "<" {printf( "lt "); tComparativeOperator++;} ">=" {printf( "geq ");tComparativeOperator++;} "<=" {printf( "leq ");tComparativeOperator++;} "=" {printf( "eq "); tComparativeOperator++;} "!=" {printf( "neq ");tComparativeOperator++;} ":=" {printf( "become "); tAssignmentOperator++;} {SYM} {printf( "%s ", yytext); tSymbol++;} {OPERA} {printf( "%s ", yytext); tOperator++;} {DIGIT}+ {printf( "number(%s) ", yytext); tNumber++;} {ALPHA}({ALPHA}|{DIGIT})* {fprintf(yyout, "ident(%s) ", yytext); tIdent++;} "\t" {printf("\t");} "\n" {printf("\n");} ; . {printf( "%s ", yytext);} %% main(int argc, char *argv[]) { tNumber = 0; tIdent = 0; tReservedWord = 0; tOperator = 0; tSymbol = 0; tAssignmentOperator = 0; tComparativeOperator = 0; if(argc > 1) { yyin = fopen(argv[1], "r"); if(argc == 3) { yyout = fopen(argv[2], "w"); } } yylex(); printf( "予約語 = %d\n", tReservedWord); printf("算術演算子 = %d\n", tOperator); printf("記号 = %d\n", tSymbol); printf( "関係演算子 = %d\n", tComparativeOperator); printf( "代入演算子 = %d\n", tAssignmentOperator); printf( "数字 = %d\n", tNumber); printf( "識別子 = %d\n", tIdent); }