c语言自己编译自己,自己动手写C语言编译器(5)

依托Bison强大的工具, 写编译器,先用编译原理搞个计算器玩玩。如下:

Bison工具:

文件:first.y

%{

#define YYSTYPE double

#include

int yylex (void);

void yyerror (char const *);

%}

%token NUM

%%

input:

|input line

;

line: '\n'

| exp '\n' {printf("\t%.10g\n", $1);}

;

exp:NUM { $$ = $1; }

| exp exp '+' { $$ = $1 + $2; }

| exp exp '-' { $$ = $1 - $2; }

| exp exp '*' { $$ = $1 * $2; }

| exp exp '/' { $$ = $1 / $2; }

/* Unary minus */

| exp 'n' { $$ = -$1; }

;

%%

#include

int yylex (void)

{

int c;

/* Skip white space. */

while ((c = getchar ()) == ' ' || c == '\t')

;

/* Process numbers. */

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

{

ungetc (c, stdin);

scanf ("%lf", &yylval);

return NUM;

}

/* Return end-of-input. */

if (c == EOF)

return 0;

/* Return a single char. */

return c;

}

void yyerror (char const * error)

{

}

int main()

{

return yyparse ();

}

在Ubuntu的linux下安装Bison2.5,运行:

bison first.y

gcc -o first first.tab.c

运行

./fisrt

1  4  +

5

3  10  *

30

OK。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值