From f6ebfc504645cd285f8b62b643ead8e38a0f496b Mon Sep 17 00:00:00 2001 From: Lin <1658352587@qq.com> Date: Fri, 17 Nov 2023 15:12:26 +0000 Subject: [PATCH] update src/lexer/lexical_analyzer.l. Signed-off-by: Lin <1658352587@qq.com> --- src/lexer/lexical_analyzer.l | 57 +++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/src/lexer/lexical_analyzer.l b/src/lexer/lexical_analyzer.l index c6ac08f..427af99 100755 --- a/src/lexer/lexical_analyzer.l +++ b/src/lexer/lexical_analyzer.l @@ -21,11 +21,51 @@ int pos_end; /****请在此补全所有flex的模式与动作 start******/ //STUDENT TO DO + /******** 运算 ********/ +\+ {pos_start=pos_end;pos_end+=strlen(yytext);return ADD;} +\- {pos_start=pos_end;pos_end+=strlen(yytext);return SUB;} +\* {pos_start=pos_end;pos_end+=strlen(yytext);return MUL;} +\/ {pos_start=pos_end;pos_end+=strlen(yytext);return DIV;} +\< {pos_start=pos_end;pos_end+=strlen(yytext);return LT;} +\<\= {pos_start=pos_end;pos_end+=strlen(yytext);return LTE;} +\> {pos_start=pos_end;pos_end+=strlen(yytext);return GT;} +\>\= {pos_start=pos_end;pos_end+=strlen(yytext);return GTE;} +\=\= {pos_start=pos_end;pos_end+=strlen(yytext);return EQ;} +\!\= {pos_start=pos_end;pos_end+=strlen(yytext);return NEQ;} +\= {pos_start=pos_end;pos_end+=strlen(yytext);return ASSIN;} + + /******** 符号 ********/ +\; {pos_start=pos_end;pos_end+=strlen(yytext);return SEMICOLON;} +\, {pos_start=pos_end;pos_end+=strlen(yytext);return COMMA;} +\( {pos_start=pos_end;pos_end+=strlen(yytext);return LPARENTHESE;} +\) {pos_start=pos_end;pos_end+=strlen(yytext);return RPARENTHESE;} +\[ {pos_start=pos_end;pos_end+=strlen(yytext);return LBRACKET;} +\] {pos_start=pos_end;pos_end+=strlen(yytext);return RBRACKET;} +\{ {pos_start=pos_end;pos_end+=strlen(yytext);return LBRACE;} +\} {pos_start=pos_end;pos_end+=strlen(yytext);return RBRACE;} + + /******** 关键字 ********/ +else {pos_start=pos_end;pos_end+=strlen(yytext);return ELSE;} +if {pos_start=pos_end;pos_end+=strlen(yytext);return IF;} +int {pos_start=pos_end;pos_end+=strlen(yytext);return INT;} +float {pos_start=pos_end;pos_end+=strlen(yytext);return FLOAT;} +return {pos_start=pos_end;pos_end+=strlen(yytext);return RETURN;} +void {pos_start=pos_end;pos_end+=strlen(yytext);return VOID;} +while {pos_start=pos_end;pos_end+=strlen(yytext);return WHILE;} + + /******** ID和NUM ********/ +[a-zA-Z]+ {pos_start=pos_end;pos_end+=strlen(yytext);return IDENTIFIER;} +[0-9]+ {pos_start=pos_end;pos_end+=strlen(yytext);return INTEGER;} +[0-9]+\.|[0-9]+\.[0-9]+ {pos_start=pos_end;pos_end+=strlen(yytext);return FLOATPOINT;} +\[\] {pos_start=pos_end;pos_end+=strlen(yytext);return ARRAY;} +[a-zA-Z] {pos_start=pos_end;pos_end+=strlen(yytext);return LETTER;} + + /******** others ********/ +[\n]+ {pos_start = 1;pos_end = 1;lines+=strlen(yytext);return EOL;} +\/\*([^\*]|(\*)*[^\*\/])*(\*)*\*\/ {return COMMENT;} +[ \f\n\r\t\v] {pos_start = pos_end;pos_end+=strlen(yytext);return BLANK;} . {return ERROR;} - - - /****请在此补全所有flex的模式与动作 end******/ %% /****************C代码 start*************/ @@ -51,7 +91,16 @@ void analyzer(char* input_file, Token_Node* token_stream){ while(token = yylex()){ switch(token){ case COMMENT: - //STUDENT TO DO + //STUDENT TO DO + for(int i = 0;i < strlen(yytext);i++) + { + pos_end++; + if( yytext[i] == '\n' ) + { + lines += 1;pos_end = 1; + } + } + break; case BLANK: //STUDENT TO DO break; -- Gitee