bison实例
逆波兰记号计算器【文件名rpcalc.y】 %{
#define YYSTYPE double
#include <stdio.h>
#include <math.h>
#include <ctype.h>
int yylex (void);
void yyerror (char const *);
%} %token NUM %%
input: /* empty */
| input line
; line: '\n'
| exp '\n' { printf ("\t%.10g\n", $); }
; exp: NUM { $$ = $; }
| exp exp '+' { $$ = $ + $; }
| exp exp '-' { $$ = $ - $; }
| exp exp '*' { $$ = $ * $; }
| exp exp '/' { $$ = $ / $; }
/* Exponentiation */
| exp exp '^' { $$ = pow($, $); }
/* Unary minus */
| exp 'n' { $$ = -$; }
;
%% #include <ctype.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 ; /* Return a single char. */
return c;
} void yyerror (char const *s) {
fprintf (stderr, "%s\n", s);
} int main (void) {
return yyparse ();
}
------------------运行----------------------
bison rpcalc.y
gcc -o rpcalc -lm rpcalc.tab.c
./rpcalc
4 9 +
13
中辍符号计算器【文件名calc.y】 %{
#define YYSTYPE double
#include <math.h>
#include <stdio.h>
int yylex (void);
void yyerror (char const *);
%}
/* Bison declarations. */
%token NUM
%left '-' '+'
%left '*' '/'
%right '^' /* exponentiation */
%% /* The grammar follows. */
input: | input line
;
line:
'\n'
| exp '\n' { printf ("\t%.10g\n", $); }
;
exp:
NUM { $$ = $; }
| exp '+' exp { $$ = $ + $; }
| exp '-' exp { $$ = $ - $; }
| exp '*' exp { $$ = $ * $; }
| exp '/' exp { $$ = $ / $; }
| '-' exp { $$ = -$; }
| exp '^' exp { $$ = pow ($, $); }
| '(' exp ')' { $$ = $; }
;
%% #include <ctype.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 ; /* Return a single char. */
return c;
} void yyerror (char const *s) {
fprintf (stderr, "%s\n", s);
} int main (void) {
return yyparse ();
} ------------------运行----------------------
bison calc.y
gcc -o calc -lm calc.tab.c
./calc
8*(1+3)
32
bison实例的更多相关文章
- 最近学习工作流 推荐一个activiti 的教程文档
全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...
- mysqld_multi部署mysql单机多实例
1.安装gcc-c++.ncurses依赖包 # yum install gcc-c++ ncurses-devel 2.安装cmake,用来编译mysql # tar -xvf cmake-3.2. ...
- 多配置文件部署mysql单机多实例
1.安装gcc-c++.ncurses依赖包 # yum install gcc-c++ ncurses-devel 2.安装cmake,用来编译mysql # tar -xvf cmake-3.2. ...
- MySQL 使用mysqld_multi部署单机多实例详细过程 (转)
随着硬件层面的发展,linux系统多核已经是普通趋势,而mysql是单进程多线程,所以先天上对多进程的利用不是很高,虽然 5.6版本已经在这方面改进很多,但是也没有达到100%,所以为了充分的利用系统 ...
- Mysql单实例脚本自动化安装
安装包:mysql-5.6.31.tar.gz 已有配置文件:my.cnf *注意:本次Mysql的配置文件是在my.cnf的基础上更改得到的,my.cnf存放路径为/opt/rh/my.cnf 脚本 ...
- Thrift入门初探--thrift安装及java入门实例
什么是thrift? 简单来说,是Facebook公布的一款开源跨语言的RPC框架. 那么问题来了. 什么是RPC框架? RPC全称为Remote Procedure Call,意为远程过程调用. 假 ...
- mysql多实例-主从复制安装
安装环境:Centos6.5 mysql版本:mysql-5.5.32.tar.gz 一:安装前准备: 1.安装一些依赖库 yum install cmake gcc gcc-c++ ncurses- ...
- mysql5.6.40单实例安装二进制快捷安装
mysql5.6.40单实例安装二进制快捷安装 近期因不同环境需要不同版本的mysql实例,故为了方便操作,特此记录下来,方便自己查找. # 1.1.Centos最小化安装推荐常用依赖包 yum cl ...
- percona-5.7二进制多实例安装
percona-mysql-5.7二进制多实例安装 规划:端口号 配置文件 备注3306 /data/mysql/mysql_3306/my_3306.cnf 3307 /data/m ...
随机推荐
- 瀑布流,五大插件一个都不少Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox!
纯手工打造漂亮的瀑布流,五大插件一个都不少Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox! 前两天写的文章<纯手工打造漂亮的垂直时间轴,使用最简 ...
- CentOS_6.5_x64:VNC安装配置
1.安装软件前首先检查下系统是否已经安装了这个软件:rpm -qa tigervnc-server 2.根据前面命令的查询,显示系统还是没有安装VNC服务器端软件,那么我们就使用命令进行安装一下:yu ...
- 使用ServletContextListener和HttpSessionListener两种监听器实现记录当前网站在线人数
web.xml中配置: <listener> <listener-class>com.mcm.listener.ServletContextListenerImpl< ...
- Web 请求响应原理(转)
用Java实现Web服务器 减小字体 增大字体 摘要:WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信,H ...
- Spring实战——通过Java代码装配bean
上篇说的是无需半行xml配置完成bean的自动化注入.这篇仍然不要任何xml配置,通过Java代码也能达到同样的效果. 这么说,是要把上篇的料拿出来再煮一遍? 当然不是,上篇我们几乎都在用注解的方式如 ...
- Css3新特性应用之过渡与动画
目录 背景与边框第一部分 背景与边框第二部分 形状 视觉效果 字体排印 用户体验 结构与布局 过渡与动画 源码下载 一.缓动效果 学习和利用贝塞尔曲线,默认支持ease,ease-in,ease-ou ...
- jQuery+HTML5声音提示
WEB应用中,有时需要播放特定的声音,比如有新消息或者在线聊天消息声音提示,以前我们通过flash实现,今天我们将使用jQuery和HTML5结合示例来实现如何把声音提示带入WEB应用中. 在本例中, ...
- 试图解释下ERP
ERP,字面的意思就是企业资源规划.但现在基本上是企业信息系统的统称,过去叫MIS.我们就是有这个本事,不管什么高大上的事物,很快就会做的很烂. 你可以这样理解ERP. 现在来了个订单,你需要回答下面 ...
- trove 开发者阅读翻译
介绍 Trove为OpenStack提供数据库的服务.它的设计运行完全符合OpenStack,目标是让用户能快速.轻松地利用关系数据库的特点,没有负担的处理复杂的管理任务.云用户和数据库管理员可以根据 ...
- Word 2016插入公式快捷键
实用的插入公式快捷键"Alt+=", 与君共享