/* 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是按一个字节块一个字节块的方式写到文件。 stdout -- 标准输出设备 (printf("..")) 同 stdout。 |
int main(void) {
yyparse();
return 0;
}