自己动手写C语言编译器(5)
依托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。
自己动手写C语言编译器(5)相关推荐
- 自己动手写C语言编译器(4)
Statement由Expression构成,Expression由Token构成,Token由char构成. 从上到下呈现树形结构. 程序是由statement组成的,其实我们要的就是一种判断Sta ...
- 自己动手写C语言编译器(暂停)
1.开源的东西其实并不好用. 2.需要更多的关注Android开发和linux的工具的使用. 3.llvm编译出错的问题一直没有解决. 4.也许需要亲自与llvm的官方进行沟通.这是一个庞大的任务.
- 自己动手写C语言编译器(3)
词法分析器部分完成. 支持: 1.支持单词分割 2.支持数字类型 3.支持字符串 4.支持换行 6.支持注释 不支持: 1.不支持关键字 2.不支持变量. 3.不支持关键字. 4.不支操作符. 偶没有 ...
- 自己动手写C语言编译器(2)
直接上代码 : 支持:左右结合性 // MyCompiler.cpp : Defines the entry point for the console application. // #includ ...
- 自己动手写C语言编译器(1)
直接上代码 (表达式树 在此 初具 模型 ) 由于没有做前期的"词法分析", 1.支持 单个 字符 形式的变量 2.支持 单个 字符形式的操作符 3.支持 优先级 . 不支持 1 ...
- java c语言 for_Java能写C语言编译器吗
用java是可以写语言编译器的,用任何语言工具写都可以.各语言开发工具间只有开发效率的差异,没有可行不可行的区别. 编译器其实就是一个翻译工具,它可以把代码直接翻译成二进制文件交给CPU执行(二进制指 ...
- 自己动手制作C 语言编译器(8):表达式
这是整个编译器的最后一部分,解析表达式.什么是表达式?表达式是将各种语言要素的一个组合,用来求值.例如:函数调用.变量赋值.运算符运算等等. 表达式的解析难点有二:一是运算符的优先级问题,二是如何将表 ...
- 自己动手制作C 语言编译器(7):语句
整个编译器还剩下最后两个部分:语句和表达式的解析.它们的内容比较多,主要涉及如何将语句和表达式编译成汇编代码.这章讲解语句的解析,相对于表达式来说它还是较为容易的. 语句 C 语言区分"语句 ...
- keil c语言编译运行,Keil的c语言编译器
我曾经通过查看反汇编代码对KEILC编译器进行了测试,大概有这么一下内容,也得出一些结论. (1)全局变量:如果程序中定义了全局变量,而且初始值不是0.此时,在程序调到main()函数执行前,除了要进 ...
最新文章
- Google Guava Cache 移除监听器
- 关于Oracle Stream的安装、配置和使用
- 关于你,关于我. 你好 5G
- linux命令:mkdir 命令详解
- Beagle 0.2.16(附 Ubuntu Edgy 安顿源)
- 第八章 OGRE中合成器(也就是传说中的image-based rendering)以及如何在OGRE中对着色器的uniform变量传值
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)-MVC WebApi 用户验证 (1)
- [转]WebGL中文教程
- STC - STC15官方库函数 - 串口操作修改
- unity上线流程_新的Unity商店上线了
- Cortex m0+笔记
- python爬网易评论
- Unity 3D 入门小游戏 小球酷跑(上)
- 网店营销成为运营商营销的重要平台
- 我叫mt4服务器注册 满了,我叫MT4注册上限怎么办 人数上限解决办法
- 灵感 | 设计平平无奇?试试这种方法!
- 入门,前后端实现简单账号密码登录
- 黑苹果cpu架构三个问号_苹果三位芯片大神讲述M1背后的故事
- linux中默认文件666和目录777的权限关系
- 使用 TreeView IE Web 控件
热门文章
- Java实现均摊_Java均摊复杂度和防止复杂度的震荡原理分析
- 参数估计_数据分析|统计之一个总体参数估计(附代码)
- 织梦php首页老是自动恢复,dede首页网址自动加上index.html问题解决方法
- element UI 选择器 踩的坑 获取到了value 显示不出对应的 value
- python开发环境配置config_manjaro与python开发环境配置
- Django搭建个人博客:渲染Markdown文章目录
- 牛客练习赛7 E 珂朵莉的数列
- 基于AgileEAS.NET SOA 平台SAAS架构技术的开源分销ERP系统-SmartERP.NET下载配置说明
- Python3 登陆网页并保持cookie
- [Swift]枚举、类与结构体的对比