From ae5df4292eaa91cf68a5046e67dd034a86cbe2a3 Mon Sep 17 00:00:00 2001 From: ikun <14403216+majiaqikun@user.noreply.gitee.com> Date: Thu, 16 May 2024 06:21:44 +0000 Subject: [PATCH] update src/lexer/lexical_analyzer.l. Signed-off-by: ikun <14403216+majiaqikun@user.noreply.gitee.com> --- src/lexer/lexical_analyzer.l | 57 ++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/src/lexer/lexical_analyzer.l b/src/lexer/lexical_analyzer.l index ef3ce7e..0bf6ff8 100644 --- a/src/lexer/lexical_analyzer.l +++ b/src/lexer/lexical_analyzer.l @@ -20,7 +20,50 @@ int pos_end; /******************TODO*********************/ /****请在此补全所有flex的模式与动作 start******/ //STUDENT TO DO - + /* 运算 */ +\+ {pos_start = pos_end; pos_end++; return ADD;} +\- {pos_start = pos_end; pos_end++; return SUB;} +\* {pos_start = pos_end; pos_end++; return MUL;} +\/ {pos_start = pos_end; pos_end++; return DIV;} +\< {pos_start = pos_end; pos_end++; return LT;} +"<=" {pos_start = pos_end; pos_end+=2; return LTE;} +\> {pos_start = pos_end; pos_end++; return GT;} +">=" {pos_start = pos_end; pos_end+=2; return GTE;} +"==" {pos_start = pos_end; pos_end+=2; return EQ;} +"!=" {pos_start = pos_end; pos_end+=2; return NEQ;} +\= {pos_start = pos_end; pos_end++; return ASSIN;} + + /* 符号 */ +\; {pos_start = pos_end; pos_end++; return SEMICOLON;} +\, {pos_start = pos_end; pos_end++; return COMMA;} +\( {pos_start = pos_end; pos_end++; return LPARENTHESE;} +\) {pos_start = pos_end; pos_end++; return RPARENTHESE;} +\[ {pos_start = pos_end; pos_end++; return LBRACKET;} +\] {pos_start = pos_end; pos_end++; return RBRACKET;} +\{ {pos_start = pos_end; pos_end++; return LBRACE;} +\} {pos_start = pos_end; pos_end++; return RBRACE;} + + /* 关键字 */ +else {pos_start = pos_end; pos_end+=4; return ELSE;} +if {pos_start = pos_end; pos_end+=2; return IF;} +int {pos_start = pos_end; pos_end+=3; return INT;} +float {pos_start = pos_end; pos_end+=5; return FLOAT;} +return {pos_start = pos_end; pos_end+=6; return RETURN;} +void {pos_start = pos_end; pos_end+=4; return VOID;} +while {pos_start = pos_end; pos_end+=5; return WHILE;} + + /* ID & NUM */ +[a-zA-Z]+ {pos_start = pos_end; pos_end+=yyleng; return IDENTIFIER;} +[0-9]+ {pos_start = pos_end; pos_end+=yyleng; return INTEGER;} +[0-9]+\.|[0-9]*\.[0-9]+ {pos_start = pos_end; pos_end+=yyleng; return FLOATPOINT;} +"[]" {pos_start = pos_end; pos_end+=2; return ARRAY;} +[a-zA-Z] {pos_start = pos_end; pos_end++; return LETTER;} + + /* others */ +\n {return EOL;} +\/\*[^*]*\*+([^/*][^*]*\*+)*\/ {return COMMENT;} +" " {pos_start = pos_end; pos_end+=yyleng; return BLANK;} +\t {pos_start = pos_end; pos_end+=yyleng; return BLANK;} . {return ERROR;} @@ -52,11 +95,21 @@ void analyzer(char* input_file, Token_Node* token_stream){ switch(token){ case COMMENT: //STUDENT TO DO + for (int i=0;i