逆波兰记号计算器【文件名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实例的更多相关文章

  1. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  2. mysqld_multi部署mysql单机多实例

    1.安装gcc-c++.ncurses依赖包 # yum install gcc-c++ ncurses-devel 2.安装cmake,用来编译mysql # tar -xvf cmake-3.2. ...

  3. 多配置文件部署mysql单机多实例

    1.安装gcc-c++.ncurses依赖包 # yum install gcc-c++ ncurses-devel 2.安装cmake,用来编译mysql # tar -xvf cmake-3.2. ...

  4. MySQL 使用mysqld_multi部署单机多实例详细过程 (转)

    随着硬件层面的发展,linux系统多核已经是普通趋势,而mysql是单进程多线程,所以先天上对多进程的利用不是很高,虽然 5.6版本已经在这方面改进很多,但是也没有达到100%,所以为了充分的利用系统 ...

  5. Mysql单实例脚本自动化安装

    安装包:mysql-5.6.31.tar.gz 已有配置文件:my.cnf *注意:本次Mysql的配置文件是在my.cnf的基础上更改得到的,my.cnf存放路径为/opt/rh/my.cnf 脚本 ...

  6. Thrift入门初探--thrift安装及java入门实例

    什么是thrift? 简单来说,是Facebook公布的一款开源跨语言的RPC框架. 那么问题来了. 什么是RPC框架? RPC全称为Remote Procedure Call,意为远程过程调用. 假 ...

  7. mysql多实例-主从复制安装

    安装环境:Centos6.5 mysql版本:mysql-5.5.32.tar.gz 一:安装前准备: 1.安装一些依赖库 yum install cmake gcc gcc-c++ ncurses- ...

  8. mysql5.6.40单实例安装二进制快捷安装

    mysql5.6.40单实例安装二进制快捷安装 近期因不同环境需要不同版本的mysql实例,故为了方便操作,特此记录下来,方便自己查找. # 1.1.Centos最小化安装推荐常用依赖包 yum cl ...

  9. percona-5.7二进制多实例安装

    percona-mysql-5.7二进制多实例安装 规划:端口号     配置文件     备注3306 /data/mysql/mysql_3306/my_3306.cnf 3307 /data/m ...

随机推荐

  1. TOGAF架构开发方法(ADM)之架构变更管理阶段

    TOGAF架构开发方法(ADM)之架构变更管理阶段 1.10 架构变更管理(Architecture Change Management) 企业架构开发方法各阶段——架构变更管理 1.10.1 目标 ...

  2. python cookbook学习笔记 第一章 文本(2)

    1.6合并字符串 ka=list('kaluoc') #字符串转成字符串列表 print ''.join(ka) #大量的字符串相连,join是最高效的 print '%s%s something % ...

  3. python 调用 bash (python 调用linux命令)

    原文这里有显示地址:http://zhou123.blog.51cto.com/4355617/1312791 现在摘取一部分: 这里介绍一下python执行shell命令的四种方法: 1.os模块中 ...

  4. 黑马程序员:Java基础总结----网络编程

    黑马程序员:Java基础总结 网络编程   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...

  5. [置顶] Java开源代码研究总结

          由于工作中的需要,最近在研究SNMP协议和利用snmp4j和snmp4j.agent(   http://www.snmp4j.org/ ),实现snmp的南向和北向功能. 结合以前看过的 ...

  6. Ubuntu12.04 Eclipse 提示框背景色修改

    I had to edit these files: /usr/share/themes/Ambiance/gtk-3.0/settings.ini /usr/share/themes/Ambianc ...

  7. log4net 开箱即用

    废话少说,先上代码 log4net Demo 好的系统都有日志,log4net 是我在.net平台下用过最爽的日志库,简单易用.功能强大. 基于配置(配置很简单,一看就明,通用,拷去即用): 可同时保 ...

  8. OC之知识储备篇

    1. Objective-C是基于C语言的. a. 在C语言的基础之上新增了面向对象的语法. b. 将C语言中复杂的.繁琐的语法封装的更为简单. 2. Objective-C程序的源文件的后缀名.m  ...

  9. jQuery 效果 - fadeTo() 方法

    实例 使用淡出效果来隐藏一个 <p> 元素: $(".btn1").click(function(){ $("p").fadeTo(1000,0.4 ...

  10. oracle——用户

    新增用户 用system用户登录 CREATE USER TEST1 IDENTIFIED BY TEST1; CREATE USER:创建用户命令,后跟用户名: IDENTIFIED BY:后跟密码 ...