diff --git a/src/lexer.l b/src/lexer.l index 2d7d819..f777781 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -9,9 +9,11 @@ #include "ast.h" #include "parser.h" +#define TESTINFO(type,value) printf("LexToken(%s,%s,%d))\n",type,value,yylineno) int line_cnt = 1; %} + MultilineComment "/*"([^\*]|(\*)*[^\*/])*(\*)*"*/" SingleLineComment "//"[^\n]+ Lex_err [1-9][0-9]*[a-zA-Z]+[0-9]*|0[0-7]*[8-9a-zA-Z_]+[0-9a-zA-Z_]* @@ -26,39 +28,39 @@ Lex_err [1-9][0-9]*[a-zA-Z]+[0-9]*|0[0-7]*[8-9a-zA-Z_]+[0-9a-zA-Z_]* } "\n" { line_cnt++; } [ \t] { } -"int" { return INT; } -"float" { return FLOAT; } -"void" { return VOID; } -"const" { return CONST; } -"return" { return RETURN; } -"if" { return IF; } -"else" { return ELSE; } -"while" { return WHILE; } -"break" { return BREAK; } -"continue" { return CONTINUE; } -"(" { return LP; } -")" { return RP; } -"[" { return LB; } -"]" { return RB; } -"{" { return LC; } -"}" { return RC; } -"," { return COMMA; } -";" { return SEMICOLON; } -"+" { return PLUS; } -"-" { return MINUS; } -"!" { return NOT; } -"=" { return ASSIGN; } -"*" { return MUL; } -"/" { return DIV; } -"%" { return MOD; } -"&&" { return AND; } -"||" { return OR; } -"==" { return EQ; } -"!=" { return NE; } -"<" { return LT; } -"<=" { return LE; } -">" { return GT; } -">=" { return GE; } +"int" { TESTINFO("INT"); return INT; } +"float" { TESTINFO("FLOAT"); return FLOAT; } +"void" { TESTINFO("VOID");return VOID; } +"const" { TESTINFO("CONST"); return CONST; } +"return" { TESTINFO("RETURN"); return RETURN; } +"if" { TESTINFO("IF"); return IF; } +"else" { TESTINFO("ELSE") return ELSE; } +"while" { TESTINFO("WHILE");return WHILE; } +"break" { TESTINFO("BREAK");return BREAK; } +"continue" { TESTINFO("CONTINUE"); return CONTINUE; } +"(" { TESTINFO("LP");return LP; } +")" { TESTINFO("RP");return RP; } +"[" { TESTINFO("LB");return LB; } +"]" { TESTINFO("RB");return RB; } +"{" { TESTINFO("LC");return LC; } +"}" { TESTINFO("RC");return RC; } +"," { TESTINFO("COMMA");return COMMA; } +";" { TESTINFO("SEMI");return SEMICOLON; } +"+" { TESTINFO("PLUS");return PLUS; } +"-" { TESTINFO(MINUS);return MINUS; } +"!" { TESTINFO("NOT");return NOT; } +"=" { TESTINFO("ASSIGN");return ASSIGN; } +"*" { TESTINFO("MUL");return MUL; } +"/" { TESTINFO("DIV");return DIV; } +"%" { TESTINFO("MOD");return MOD; } +"&&" { TESTINFO("AND");return AND; } +"||" { TESTINFO("OR");return OR; } +"==" { TESTINFO("EQ");return EQ; } +"!=" { TESTINFO("NE");return NE; } +"<" { TESTINFO("LT");return LT; } +"<=" { TESTINFO("LE");return LE; } +">" { TESTINFO("GT");return GT; } +">=" { TESTINFO("GE");return GE; } 0[xX][0-9a-fA-F]* { int val = 0; int len = strlen(yytext); @@ -70,6 +72,7 @@ Lex_err [1-9][0-9]*[a-zA-Z]+[0-9]*|0[0-7]*[8-9a-zA-Z_]+[0-9a-zA-Z_]* val += yytext[i] - 'a' + 10; } yylval.int_val = val; + TESTINFO("INT_LIT"); return INT_LIT; } @@ -77,9 +80,13 @@ Lex_err [1-9][0-9]*[a-zA-Z]+[0-9]*|0[0-7]*[8-9a-zA-Z_]+[0-9a-zA-Z_]* yylval.str_val = (char *)malloc(strlen(yytext) + 1); strcpy(yylval.str_val, yytext); yylval.str_val[strlen(yytext)] = '\0'; + TESTINFO("ID"); return ID; } -[0-9]*\.[0-9]+f?|[0-9]+e-?[0-9]+f? { yylval.float_val = atof(yytext); return FLOAT_LIT; } +[0-9]*\.[0-9]+f?|[0-9]+e-?[0-9]+f? { + yylval.float_val = atof(yytext); + TESTINFO("FLOAT_LIT"); + return FLOAT_LIT; } {Lex_err} { return LEX_ERR; } [1-9][0-9]*|0 { yylval.int_val = atoi(yytext); return INT_LIT; } 0[0-7]+ { @@ -88,6 +95,7 @@ Lex_err [1-9][0-9]*[a-zA-Z]+[0-9]*|0[0-7]*[8-9a-zA-Z_]+[0-9a-zA-Z_]* for (int i = 1; i < len; i++) val = (val << 3) + yytext[i] - '0'; yylval.int_val = val; + TESTINFO("INT_LIT"); return INT_LIT; } . { }