From 52bb9d67c340a9210097b2ca0a4bb9524ee323d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=85=A7?= <13707725+Xu-Huii@user.noreply.gitee.com> Date: Wed, 15 Nov 2023 15:22:17 +0000 Subject: [PATCH] =?UTF-8?q?update=20src/lexer/lexical=5Fanalyzer.l.=20?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 徐慧 <13707725+Xu-Huii@user.noreply.gitee.com> --- src/lexer/lexical_analyzer.l | 72 +++++++++++++++++++++++++++++------- 1 file changed, 58 insertions(+), 14 deletions(-) diff --git a/src/lexer/lexical_analyzer.l b/src/lexer/lexical_analyzer.l index c6ac08f..4c292ab 100755 --- a/src/lexer/lexical_analyzer.l +++ b/src/lexer/lexical_analyzer.l @@ -1,8 +1,8 @@ -%option noyywrap +option noyywrap %{ /*****************声明和选项设置 begin*****************/ #include -#include +#include% #include "lexical_analyzer.h" @@ -20,13 +20,52 @@ int pos_end; /******************TODO*********************/ /****请在此补全所有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+=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+=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*************/ @@ -47,16 +86,23 @@ void analyzer(char* input_file, Token_Node* token_stream){ int token; int index = 0; - - while(token = yylex()){ + while(token = yylex()){ switch(token){ case COMMENT: - //STUDENT TO DO + int len = strlen(yytext); + for(int i=0;i