当前位置: 首页 > article >正文

flex与bison入门,编译原理:flex编写词法分析器(使用windows环境)

目录

1.题目

2.flex与bison的下载安装

(1)文件获取

途径一:文件下载地址如下

途径二:加qq群935465933领取

(2)安装

bison安装

flex安装

3. 编写.l文件

4.生成lex.yy.c文件,以及编译操作

(1)打开命令窗口

(2)flex指令生成lex.yy.c文件

(3)编译lex.yy.c文件


1.题目

编写LEX文件:一个能识别所有运算式中包含的符号:数字(0-9)+,变量(a-zA-Z)+,运算符:“+,-,*,/,(,)”。
 如输入(a+10)*b,输出:
   OPERATER:(
   WORD:a
   OPERATER:+
   NUMBER:10
   OPERATER:)
   OPERATER:*
   WORD:b
 

2.flex与bison的下载安装

(1)文件获取

途径一:该文章绑定文件

途径二:文件下载地址如下

链接:https://pan.baidu.com/s/1GWCSWVex932zWPkdrV89_g?pwd=link 
提取码:link

途径三:加qq群935465933领取

群密码:link

没有解压缩软件的朋友可以在群内自行下载

(2)安装

bison安装

flex安装

以上两款软件的安装流程都没有什么需要特别注意的点,大家自行安装即可。(建议放在自己容易找到的文件夹中)

bison我们在后续的学习中会用到,先下载下来不亏;

下面我们进入flex安装后bin目录,后续操作都将在这里进行。

3. 编写.l文件

首先在此目录下新建一个文本文件,然后重命名,把他改为homework1.l

ps:不会显示,修改文件后缀的朋友可以搜索(怎么显示文件后缀),网上教程很多,在此不过多阐述

在此,我们右键.l文件,选择打开方式,用记事本或者Notepad打开,输入下列代码即可

ps:这里的END是便于大家作业要求输出学号用的,可以自行更改输出的语句

%option main	/*定义数字类型NUM*/
NUM [0-9]+/*定义字母类型WORD*/	 
WORD [a-zA-Z]+		/*定义字符类型OPT*/
OPT ("+"|"-"|"*"|"/"|"("|")")	/*结束输出自己的信息,不需要可以连同第14行删除*/
END("\n")
%%
{NUM} {printf("NUMBER:%s\n",yytext);}
{WORD} {printf("WORD:%s\n",yytext);}
{OPT} {printf("OPERATER:%s\n",yytext);}
{END} {printf("\n程序运行结束\n",yytext);}
. {}
%%

保存后退即可出

4.生成lex.yy.c文件,以及编译操作

(1)打开命令窗口

接着在该目录下打开命令窗口

点击,输入cmd,回车即可

(2)flex指令生成lex.yy.c文件

dir

首先查看目录,确保我们所在文件位置与.l文件,flex文件一致

然后用flex指令生成lex.yy.c文件

flex homework1.l

这样便是成功了,如果出错检查空格等错误。

(3)编译lex.yy.c文件

回到目录,这时我们看到文件里多了lex.yy.c文件

右键点击,选择打开方式

点击编译,弹出命令框,然后输入即可

输入题目所要求式子即可

http://www.lryc.cn/news/2417869.html

相关文章:

  • NIVIDIA 硬解码学习2
  • 泛函分析的優勢在數值解析中:高效計算與準確度的平衡
  • 向量的点乘和叉乘
  • 打印机连接三种方式
  • Netbeans 适配C/C++、JAVA防坑秘笈
  • JS中几个getElementByXXX方法的区别
  • Varnish的基本应用详解
  • 使用autoit,可以节省您很多时间
  • 图文结合!非常详细Linux简介与安装!
  • CSS行高——line-height
  • Android面试:Invalidate、RequestLayout
  • Java基础—正则表达式
  • Font Awesome Icon Picker 教程
  • 开源全能免费的视频下载神器:Hitomi Downloader
  • PIM介绍
  • 通俗讲解:什么是Web
  • LTP简介
  • 排序算法——七种排序算法汇总,详细(Java)
  • 算法基础2 —— OJ入门以及暴力枚举
  • 揭秘!“真假美猴王事件”其实是如来的一次运维事故
  • Java面试题大全带答案
  • ![CDATA[]]介绍及使用方法
  • Vue模块化-module
  • 动态ip和静态ip有什么区别?
  • Fullcalendar在Vue中的一些使用心得
  • static_cast用法
  • 【001 操作系统】什么是线程、进程?线程进程的区别是什么?
  • 全面解读:大厂牛人详解《数据结构与算法》,附源码笔记,让你轻松掌握核心知识
  • npm 安装淘宝镜像最新2023、nvm安装node报错
  • 2024年全球50家最佳网络安全公司