%option noyywrap %{ /*****************声明和选项设置 begin*****************/ #include #include #include "syntax_tree.h" #include "calculator.h" int lines; int pos_start; int pos_end; void pass_node(char *text){ yylval.node = new_syntax_tree_node(text); } /*****************声明和选项设置 end*****************/ %} %x COMMENT %% \+ {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 LPARENTHESE;} \) {pos_start = pos_end; pos_end += 1; pass_node(yytext); return RPARENTHESE;} [0-9]+ { pos_start = pos_end; pos_end += strlen(yytext); pass_node(yytext); return NUM; } \n {lines++; pos_start = 1; pos_end = 1;} [ \t] {pos_start = pos_end; pos_end += 1;} %%