%option noyywrap %{ /*****************声明和选项设置 begin*****************/ #include #include #include "syntax_tree.h" #include "syntax_analyzer.h" int lines=1; int pos_start=1; int pos_end=1; void pass_node(char *text){ yylval.node = new_syntax_tree_node(text); } /*****************声明和选项设置 end*****************/ %} %x COMMENT %% /* to do for students */ /* two cases for you, pass_node will send flex's token to bison */ \+ {pos_start = pos_end; pos_end += 1; pass_node(yytext); return ADD;} \- {pos_start = pos_end; pos_end += 1; pass_node(yytext); return SUB;} \* {pos_start = pos_end; pos_end += 1; pass_node(yytext); return MUL;} \/ {pos_start = pos_end; pos_end += 1; pass_node(yytext); return DIV;} \< {pos_start = pos_end; pos_end += 1; pass_node(yytext); return LT;} \<= {pos_start = pos_end; pos_end += 2; pass_node(yytext); return LTE;} \> {pos_start = pos_end; pos_end += 1; pass_node(yytext); return GT;} \>= {pos_start = pos_end; pos_end += 2; pass_node(yytext); return GTE;} == {pos_start = pos_end; pos_end += 2; pass_node(yytext); return EQ;} != {pos_start = pos_end; pos_end += 2; pass_node(yytext); return NEQ;} = {pos_start = pos_end; pos_end += 1; pass_node(yytext); return ASSIN;} ; {pos_start = pos_end; pos_end += 1; pass_node(yytext); return SEMICOLON;} , {pos_start = pos_end; pos_end += 1; pass_node(yytext); return COMMA;} /* TODO: phase1. 请在这里补充其他的词法规则 */ . { pos_start = pos_end; pos_end++; return ERROR; } /****请在此补全所有flex的模式与动作 end******/ %%