%{ #include <stdio.h> int a; int op=0; %} %% [0-9]+ { if(op==0){ sscanf(yytext,"%d",&a); } else { int b; sscanf(yytext,"%d",&b); switch(op) { case 1: printf("%d\n",a+b); break; case 2: printf("%d\n",a-b); break; case 3: printf("%d\n",a*b); break; case 4: printf("%d\n",a/b); break; default: break; } op=0; } } "+" {op=1;} "-" {op=2;} "*" {op=3;} "/" {op=4;} [\t \n]+ ; . ; %% int main() { yylex(); return 0; } |
%{ #include <stdio.h> int a; int op=0; %} %s ADD SUB MUL DIV %% <ADD>[0-9]+ { int tmp; sscanf(yytext,"%d",&tmp); printf("%d\n",a+tmp); BEGIN INITIAL; } <SUB>[0-9]+ { int tmp; sscanf(yytext,"%d",&tmp); printf("%d\n",a-tmp); BEGIN INITIAL; } <MUL>[0-9]+ { int tmp; sscanf(yytext,"%d",&tmp); printf("%d\n",a*tmp); BEGIN INITIAL; } <DIV>[0-9]+ { int tmp; sscanf(yytext,"%d",&tmp); printf("%d\n",a/tmp); BEGIN INITIAL; } [0-9]+ {sscanf(yytext,"%d",&a);} "+" {BEGIN ADD;} "-" {BEGIN SUB;} "*" {BEGIN MUL;} "/" {BEGIN DIV;} [\t \n]+ ; . ; %% int main() { yylex(); return 0; } |
flex 就是做语法分析的,不知道你想说什么.
Lex - A Lexical Analyzer Generator
难道不是词法分析?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |