From f23f56057fa207b937d6bb537740d994fc1bb2a6 Mon Sep 17 00:00:00 2001 From: huiwen-yayaya <2926371624@qq.com> Date: Sat, 9 Dec 2023 15:19:02 +0000 Subject: [PATCH] update src/lexer/lexical_analyzer.l. Signed-off-by: huiwen-yayaya <2926371624@qq.com> --- src/lexer/lexical_analyzer.l | 77 ++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 7 deletions(-) diff --git a/src/lexer/lexical_analyzer.l b/src/lexer/lexical_analyzer.l index c6ac08f..210896a 100755 --- a/src/lexer/lexical_analyzer.l +++ b/src/lexer/lexical_analyzer.l @@ -20,11 +20,48 @@ int pos_end; /******************TODO*********************/ /****请在此补全所有flex的模式与动作 start******/ //STUDENT TO DO - -. {return ERROR;} - - - + +\+ {pos_start=pos_end;pos_end=pos_start+1;return ADD;} +\- {pos_start=pos_end;pos_end=pos_start+1;return SUB;} +\* {pos_start=pos_end;pos_end=pos_start+1;return MUL;} +\/ {pos_start=pos_end;pos_end=pos_start+1;return DIV;} +\< {pos_start=pos_end;pos_end=pos_start+1;return LT;} +"<=" {pos_start=pos_end;pos_end=pos_start+2;return LTE;} +\> {pos_start=pos_end;pos_end=pos_start+1;return GT;} +">=" {pos_start=pos_end;pos_end=pos_start+2;return GTE;} +"==" {pos_start=pos_end;pos_end=pos_start+2;return EQ;} +"!=" {pos_start=pos_end;pos_end=pos_start+2;return NEQ;} +\= {pos_start=pos_end;pos_end=pos_start+1;return ASSIN;} + +\; {pos_start=pos_end;pos_end=pos_start+1;return SEMICOLON;} +\, {pos_start=pos_end;pos_end=pos_start+1;return COMMA;} +\( {pos_start=pos_end;pos_end=pos_start+1;return LPARENTHESE;} +\) {pos_start=pos_end;pos_end=pos_start+1;return RPARENTHESE;} +\[ {pos_start=pos_end;pos_end=pos_start+1;return LBRACKET;} +\] {pos_start=pos_end;pos_end=pos_start+1;return RBRACKET;} +\{ {pos_start=pos_end;pos_end=pos_start+1;return LBRACE;} +\} {pos_start=pos_end;pos_end=pos_start+1;return RBRACE;} + +else {pos_start=pos_end;pos_end=pos_start+4;return ELSE;} +if {pos_start=pos_end;pos_end=pos_start+2;return IF;} +int {pos_start=pos_end;pos_end=pos_start+3;return INT;} +float {pos_start=pos_end;pos_end=pos_start+5;return FLOAT;} +return {pos_start=pos_end;pos_end=pos_start+6;return RETURN;} +void {pos_start=pos_end;pos_end=pos_start+4;return VOID;} +while {pos_start=pos_end;pos_end=pos_start+5;return WHILE;} + +[a-zA-Z]+ {pos_start=pos_end;pos_end=pos_start+strlen(yytext);return IDENTIFIER;} +[0-9]+ {pos_start=pos_end;pos_end=pos_start+strlen(yytext);return INTEGER;} +[0-9]*\.[0-9]+ {pos_start=pos_end;pos_end=pos_start+strlen(yytext);return FLOATPOINT;} +"[]" {pos_start=pos_end;pos_end=pos_start+2;return ARRAY;} +[a-zA-Z] {pos_start=pos_end;pos_end=pos_start+1;return LETTER;} +[0-9]+\. {pos_start=pos_end;pos_end=pos_start+strlen(yytext);return FLOATPOINT;} + +\n {return EOL;} +\/\*([^\*]|(\*)*[^\*\/])*(\*)*\*\/ {return COMMENT;} +" " {return BLANK;} +\t {return BLANK;} +. {pos_start=pos_end;pos_end=pos_start+strlen(yytext);return ERROR;} /****请在此补全所有flex的模式与动作 end******/ %% @@ -52,12 +89,38 @@ void analyzer(char* input_file, Token_Node* token_stream){ switch(token){ case COMMENT: //STUDENT TO DO + { + pos_start=pos_end; + pos_end=pos_start+2; + int i=2; + while(yytext[i]!='*' || yytext[i+1]!='/') + { + if(yytext[i]=='\n') + { + lines=lines+1; + pos_end=1; + } + else + pos_end=pos_end+1; + i=i+1; + } + pos_end=pos_end+2; + break; + } case BLANK: //STUDENT TO DO - break; + { + pos_start=pos_end; + pos_end=pos_start+1; + break; + } case EOL: //STUDENT TO DO - break; + { + lines+=1; + pos_end=1; + break; + } case ERROR: printf("[ERR]: unable to analysize %s at %d line, from %d to %d\n", yytext, lines, pos_start, pos_end); default : -- Gitee