rendered paste body/*学籍番号: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);}