逆波兰记号计算器【文件名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. SQL Server 2008 - Cannot set a credential for principal 'sa'.

    SQL Server 2008 - Cannot set a credential for principal 'sa'. 很久没有用到SQL Server了,今天有幸在帮同事解决一个SQL Serv ...

  2. API接口服务端

    <?php /** * API接口服务端 * * */ require 'mysql_class.php'; header('Content-Type:text/html;charset=utf ...

  3. <我的外骨骼,诺基>后的访谈

    <我的外骨骼,诺基>后的访谈 在接下采访任务之前,我对杨贵福的了解仅仅限于:有名的科幻作家,男性,成年.我虽然读过他的许多作品,但在这些作品中并不能找到作者的影子.我试着从作品的行文风格中 ...

  4. php设计模式----工厂模式

    工厂模式主要是为了代码执行的时候更灵活地new对象,就像工厂流水线一样,批量生产出产品. 目的:简化对象生成过程,更加灵活. 例子如下: <?php /** * User: freephp * ...

  5. HQL练习

    Hive学习笔记总结 05. Hql练习 1. hql基础练习 题目和数据来源:http://www.w2b-c.com/article/150326(去掉-) create和load create ...

  6. 【C语言】一些重要的知识点

    1.#include <stdio.h> #include 是C语言的预处理指令之一,所谓预处理,就是在编译之前做的处理,预处理指令一般以 # 开头 #include 指令后面会跟着一个文 ...

  7. Docker集群实验环境布署--swarm【4 管理组件--manager】

    主机分配如下,支持双活,中断其中1台,primary会通过consul自动重新选举   10.40.100.141 docker-manager0.venic.com 10.40.100.142 do ...

  8. 话说Angularjs的$resource模块

    上一篇中讲到使用$http同服务器进行通信,但是功能上比较简单,AngularJS还提供了另外一个可选的服务$resource,使用它可以非常方便的同支持restful的服务单进行数据交互. 安装 n ...

  9. STURTS2 HELLOWORLD

    4. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC " ...

  10. grunt--自常用配置文件--js/样式压缩打包,sass工具整合使用

    // Project configuration. module.exports = function(grunt) { // 使用严格模式 'use strict'; // 这里定义我们需要的任务 ...