第一个简单的Yacc程序

第一个简单的Yacc程序。

%{

/************************************************************

          第一个简单的计算器 ,Yacc

************************************************************/

 

#include <ctype.h>

#include <stdio.h>

#define YYSTYPE double

%}

 

%token NUMBER

 

%%

lines    : expr '/n'            { printf("%g/n", $1); }

         | lines '/n'

         ;

 

expr : expr '+' term                  { $$ = $1 + $3; }

         | expr '-' term                  { $$ = $1 - $3; }

         | term

         ;

 

term : term '*' factor           { $$ = $1 * $3; }

         | term '/' factor           { $$ = $1 / $3; }

         | factor

         ;

 

factor   : '(' expr ')'                   { $$ = $2; }

         | '-' factor                { $$ = -$2; }

         | NUMBER

         ;

 

%%

int main(void)

{

     return yyparse();

}

 

int yylex(void)

{

     int c;

     while ((c = getchar()) == ' ');

     if (c == '.' || isdigit(c)) {

         ungetc(c, stdin);

         scanf("%lf", &yylval);

         return NUMBER;

     }

     return c;

}

 

int yyerror(char *s)

{

    printf("Error Message:%s/n",s);

    return 1;

}

这个程序用Bison编译,编译方式  Bison d  calc.y;产生2个文件calc.tab.ccalc.tab.h,然后在Vc下编译,成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值