WinFlexBison 下载地址:
https://sourceforge.net/projects/winflexbison/?source=typ_redirect
1.0新建项目.png 1.1新建项目.png 2.0设置依赖项.png 2.1设置依赖项.png 2.2设置依赖项.png配置环境:
window10 VS2017
win_flex_bison-latest.zip 解压到 E:\FlexBison 目录下
WinFlexBison.png
可能有弹框 点确定就好
2.3设置依赖项.png 3.0设置可执行目录.png 3.1设置可执行目录.png 3.2设置可执行目录.png 4.0编译运行.png//Parser.y
%{
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#define YYSTYPE double
void yyerror(const char *text);
int yylex(void);
%}
/////////////////////////////////////////////////////////////////////////////
// declarations section
// place any declarations here
%token NUMBER
%left '+' '-'
%left '*' '/'
%right '^'
%%
/////////////////////////////////////////////////////////////////////////////
// rules section
// place your YACC rules here (there must be at least one)
command : exp {printf("%lf\n",$1);}
;
exp : NUMBER {$$ = $1;}
| exp '+' exp {$$ = $1 + $3;}
| exp '-' exp {$$ = $1 - $3;}
| exp '*' exp {$$ = $1 * $3;}
| exp '/' exp {
if(0 != $3)
{
$$ = $1 / $3;
}
else
{
$$=0;
}
}
| exp '^' exp {$$ = pow($1,$3);}
| '(' exp ')' {$$ = $2;}
;
%%
/////////////////////////////////////////////////////////////////////////////
// programs section
int yylex(void)
{
// place your token retrieving code here
int c = 0;
while( (c = getchar()) == ' ');
if( isdigit(c) )
{
ungetc(c,stdin);
scanf_s("%lf",&yylval);
return (NUMBER);
}
if( '\n' == c )
{
return 0;
}
return c;
}
int main(void)
{
yyparse();
system("PAUSE");
return 0;
}
void yyerror(const char *text)
{
fprintf(stderr,"%s\n",text);
}
4.1编译运行.png
4.2编译运行.png
4.3编译运行.png
4.4编译运行.png
4.5编译运行.png
4.6编译运行.png
4.7编译运行.png
4.7.1编译运行.png
4.7.2编译运行.png
4.8编译运行.png
网友评论