FLEX&BISON学习笔记(二:分析calculator 1 )

    /* calculator 1 */
%{
    #include "y.tab.h"
    #include <stdlib.h>
    void yyerror(char *);
%}

%%

[0-9]+      {
                yylval = atoi(yytext);
                return INTEGER;
            }

[-+/n]      { return *yytext; }

[ /t]       ;       /* skip whitespace */

.           yyerror("Unknown character");

%%

int yywrap(void) {
    return 1;
}

 

%{
    #include <stdio.h>
    int yylex(void);
    void yyerror(char *);
%}

%token INTEGER

%%

program:
        program expr '/n'         { printf("%d/n", $2); }
        |
        ;

expr:
        INTEGER
        | expr '+' expr           { $$ = $1 + $3; }
        | expr '-' expr           { $$ = $1 - $3; }
        ;

%%

void yyerror(char *s) {
    fprintf(stderr, "%s/n", s);
}

 


fprintf是像printf那样格式化输出到文件,而fwrite是按一个字节块一个字节块的方式写到文件。

一般保存数据用fwrite写到二进制文件中。但为方便有时需要格式化数据到文件,这时才用fprintf,如fprintf(fp, "%.2f %c %d", fTest, cTest, iTest),此时读取就用相应的fread同样方式读出来。

注意:用fprinf时一定要小心,各格式化之间一定要以空格分开数据,否则易使fread读出错误的数据。并且fprintf效率很低,最好用sprintf先把数据按要求写到一个字符数组中,再用fwrite将此字符数组写到文件中

 stdout -- 标准输出设备 (printf("..")) 同 stdout。
stderr -- 标准错误输出设备
两者默认向屏幕输出。
但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。


 

int main(void) {
    yyparse();
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值