diff --git a/src/lexer/lexical_analyzer.l b/src/lexer/lexical_analyzer.l index ef3ce7e8483f3b578d7d57e36d35f16c5bc45f76..0bf6ff868ac30485d195a17221ffe05b83b0b274 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