自己动手写C语言编译器(5)
来源:互联网 发布:手机卫星电视软件 编辑:程序博客网 时间:2024/05/17 23:49
依托Bison强大的工具, 写编译器,先用编译原理搞个计算器玩玩。如下:
Bison工具:
http://coolshell.cn/articles/1547.html
http://www.gnu.org/software/bison/manual/index.html
http://baike.baidu.com/view/1137652.htm
1.1 Languages and Context-Free Grammars
文件:first.y
%{#define YYSTYPE double#include <math.h>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 <stdio.h>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
- 自己动手写C语言编译器(5)
- 自己动手写C语言编译器(1)
- 自己动手写C语言编译器(2)
- 自己动手写C语言编译器(3)
- 自己动手写C语言编译器(4)
- 自己动手写C语言编译器(暂停)
- 自己动手写C语言库函数(5)strcpy
- 自己动手写编译器
- 自己动手写编译器
- 自己动手写C语言格式化输出函数(一)
- 自己动手写C语言格式化输出函数(二)
- 自己动手写C语言格式化输出函数(三)
- 自己动手写C语言库函数(1) memcpy
- 自己动手写C语言库函数(2) memmove
- 自己动手写C语言库函数(3) strstr
- 自己动手写C语言库函数(4)strlen
- 自己动手写C语言库函数(6) atoi
- 自己动手写编译器之Tiny语言语法分析器的实现
- 免费馅饼
- Unknown run configuration type AndroidRunConfigurationType
- PHP isset()与empty()的使用区别详解
- 自己动手写C语言编译器(4)
- Java学习心得
- 自己动手写C语言编译器(5)
- 玩转spring boot——properties配置
- 发现一个图片压缩的不错的网站 收藏一下
- VMware 遇到 “无法打开内核设备 \\.\Global\vmx86” 问题
- 帆软报表控件嵌入式部署+MongoDB程序数据源
- 网站资源
- 获取苹果手机UDID方法
- 【 hdu 6053】 TrickGCD 【数论 容斥 + 莫比乌斯函数 】
- 自己动手写C语言编译器(暂停)