java下bison_windows下bison的安装与入门
Bison是一个语法分析器,bison和flex配合使用
可以将用户提供的语法规则转化成一个语法分析器
利用Bison,可以开发各种语言解释器
Bison的输入文件以.y作为后缀名
其语法文件的一般格式如下:
%{
Prologue
%}
Bison declarations
%%
Grammar rules
%%
Epilogue
使用两个%%分隔符,将文件分为三个部分
Prologue定义动作中使用的类型和变量
Bison Declaration声明了终结符号和非终结符号的名称
还可以描述运算符的优先级以及各种符号的语义值的数据类型
Grammar rules定义了如何从各个部分构造每个非终结符
Epilogue可以包含要使用的任何代码
直接下载,点击安装即可
全都安装好以后还要设置一下环境变量Path,即需要将Bison的安装目录添加到Path中
打开右键->我的电脑→属性→高级系统设置->环境变量->系统变量->Path->编辑->新建->输入Bison的安装目录具体到bin目录下->确定
退出后,打开CMD,输入bison - V,记住这里的v要大写。若安装成功就会显示bison的相关信息
C:\>bison -V
bison (GNU Bison) 2.4.1
Written by Robert Corbett and Richard Stallman.
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
然后结合具体的例子——四则运算来看看bison的作用
首先,准备好flex的词法文件cal.l:
另:flex的安装请见https://www.cnblogs.com/ASE265/p/12337922.html
%{
# include "y.tab.h"
%}
%%
[0-9]+ {yylval = atoi(yytext);return T_NUM;}
[-/+*()^\n] {return yytext[0];}
[ \t\r\a]+ {/*ignore all space*/}
. {return 0;}
%%
int yywrap(void){
return 1;
}
然后是bison的语法分析文件cal.y文件
%{
#include
int yylex();
void yyerror(const char* msg){}
%}
%token T_NUM
%left '+' '-'
%left '*' '/'
%%
S : S E '\n' {printf("ans=%d\n",$2);}
| /*enpty*/ {/*enpty*/}
;
E : E '+' E {$$ = $1+$3;}
| E '-' E {$$ = $1-$3;}
| E '*' E {$$ = $1*$3;}
| E '/' E {$$ = $1/$3;}
| T_NUM {$$ = $1;}
| '(' E ')' {$$ = $2;}
;
%%
int main(){
return yyparse();
}
然后,就是执行过程
首先bison -dyv cal.y
得到y.output,y.tab.c和y.tab.h这三个文件
然后执行词法分析文件
flex cal.l
得到lex.yy.c文件
最后对c文件进行编译
gcc lex.yy.c y.tab.c -o cal
得到可执行文件cal.exe
cal.exe就是我们的小型四则运算的编译器
测试结果如下
D:\>cal.exe
2+3
ans=5
5*9
ans=45
1-5*7
ans=-34
4+(6-9)
ans=1
确实,相当于实现了一个小型的四则运算的编译器
java下bison_windows下bison的安装与入门相关推荐
- java在mac下开发环境_Java开发环境安装(MacOS、Windows)
目录 Java for Windows安装步骤 下载JDK 2.进入主页面之后点击 3.进入到JDK10下载页面之后,将页面下拉到最下方,找到Java Archive 4.即跳转到所有的Java版本中 ...
- linux java tar 卸载_linux下jdk的卸载与安装
JDK的卸载 1.检查jdk的是否安装,显示如下表示安装: [root@localhost ~]# rpm -aq|grep java tzdata-java-2010l-1.el6.noarch j ...
- java gnu_GNU/Linux下Java开发环境的安装和配置 | 学步园
首先下载JDK,在http://www.oracle.com/technetwork/java/javase/downloads/index.html下载最新版本的JDK,选择平台为linux,就会得 ...
- [java]——window64位下java的安装与配置
前言 为生活所迫而学java 下载JDK JAVA DEVELOPMENT KIT(JDK) = JAVA RUNTIME ENVIRONMENT(JRE) + JAVA工具+JAVA基础库类.--热 ...
- linux 下jdk的卸载与安装
2019独角兽企业重金招聘Python工程师标准>>> 1.查看Linux自带的JDK是否已安装 # java -version 2.查看JDK信息 # rpm -qa | grep ...
- Ubuntu下eclipse indigo版在线安装struts插件
Ubuntu下eclipse indigo版在线安装struts插件: 1.打开eclipse,进入Help->Install new software...: 2.添加新站点,命名为:mvc, ...
- LINUX下tar.gz包的安装方法
LINUX下tar.gz包的安装方法 在tar.gz的东西不多了---- ======================================== 大多以tar.gz 和tar.bz2打包软件 ...
- linux服务器安装php7_CentOS 7 下 PHP 7.1.12 安装配置
Linux系统:CentOS 7 记录在CentOS 7 下 PHP 7.1.12 安装配置的过程. 先安装相关依赖包 yum install pcre pcre-devel zlib zlib-de ...
- Linux下JDK、Tomcat的安装及配置
1.jdk的安装 1.1下载jdk 先查看Linux系统是多少位(32位/64位):getconf LONG_BIT.再从JDK官网(http://www.oracle.com/technetwor ...
最新文章
- 个人建议:设置Alt+S快捷键来控制VSCode自动保存切换功能
- jQuery方法大全
- 连接数据库时常用的工具类(一)-------C3P0XmlUtils
- AL2018届校招笔试——自然语言处理
- QT的QModbusRequest类的使用
- dbscan聚类算法matlab_密度聚类DBSCAN、HDBSCAN(转)
- 基于 CNN 的中文对话情感分析
- 脚本编辑$RANDOM 和 case语句 (笔记)
- 华为正式宣布全场景AI计算框架MindSpore开源 降低AI开发门槛
- android的四大组件及使用场景,Android/四大组件/Activity.md · BoraxZYF/AndroidInterview - Gitee.com...
- 存储过程系列之存储过程返回值总结
- 普通人学python有啥用-普通人为什么要学习Python
- [题解] [AHOI2009] 跳棋
- 一个奇怪的发现:html与body,body的margin对html不起作用,html的padding对body却起作用
- 早先离开这个公司的人,都比吾聪明
- 学习了pr后的收获_PR学习感悟
- 如何抓取安卓APP日志?
- .NET Interop 互操作 COM+
- mstsc远程桌面连接失败,提示CredSSP加密Oracel修正
- 3ds max7渲染传奇三剑客VRay教程(PDF)
热门文章
- PS合成不会做阴影?自学 Photoshop 2022 Mac版,悬空?一眼假?这招屡试不爽
- [Xcode 实际操作]九、实用进阶-(24)使用Segue(页面的跳转连接)进行页面跳转并传递参数...
- 有了这7个高质量的黑科技软件,工作效率翻倍!
- 数学建模专栏 | 第二篇 :MATLAB 数学建模快速入门
- 激情世界杯,盛夏大放价,CDR 618返场继续嗨
- RK3568-ANDROID11-BOARD_HAVE_DONGLE 报错(3G/4G)
- Php生成货运交接单excel表,php 订单导出到excel表格及乱码问题
- python简介、第一个python程序、变量、字符编码、用户交互程序、if...else、while、for...
- Intel® 64 位和 IA-32 架构开发手册说明三卷中文版
- svchost.exe是什么进程,svchost.exe是病毒吗?