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文件

右键点击,选择打开方式

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

输入题目所要求式子即可

  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
FlexBison是常见的词法分析器和语法分析器生成工具,它们可以帮助我们更快速地开发编译器。下面是关于使用Flex实现SysY词法分析器使用Bison实现SysY语法分析器的简要介绍: 1. 使用Flex实现SysY词法分析器 SysY是一种类C语言的语言,我们可以使用Flex来实现SysY的词法分析器。基本步骤如下: (1)在Flex源代码文件中定义正则表达式和对应的词法符号,例如: ``` %{ #include <stdio.h> %} %% int { printf("INT\n"); } float { printf("FLOAT\n"); } [ \t\n] { /* ignore white space */ } . { printf("Unexpected character\n"); } %% int main(){ yylex(); return 0; } ``` 以上代码定义了两个正则表达式,分别匹配整型和浮点型数值,并输出对应的词法符号。其中,`[ \t\n]`表示忽略空格、制表符和换行符。最后在main函数中调用yylex函数进行词法分析。 (2)使用Flex生成词法分析器的C代码,例如: ``` flex lex.l ``` 以上命令将生成`lex.yy.c`文件,其中包含了词法分析器的C代码。 (3)编译C代码并生成可执行文件,例如: ``` gcc lex.yy.c -o lex ``` 以上命令将生成可执行文件`lex`,可以运行该文件并输入SysY代码进行词法分析。 2. 使用Bison实现SysY语法分析器 在完成了词法分析之后,我们可以使用Bison来实现SysY的语法分析器。基本步骤如下: (1)在Bison源代码文件中定义语法规则和对应的语法符号,例如: ``` %{ #include <stdio.h> %} %token INT FLOAT %% program : type ID '(' ')' '{' '}' { printf("SYNTAX OK\n"); } type : INT | FLOAT %% ``` 以上代码定义了一个语法规则,即程序由一个类型和标识符组成的函数定义构成,函数体为空。其中,`%token`定义了词法分析器生成的符号类型。`type`表示类型,可以是整型或浮点型。`program`表示程序,由类型、标识符、括号和花括号组成。最后在语法规则中可以输出"SYNTAX OK"表示语法分析正确。 (2)使用Bison生成语法分析器的C代码,例如: ``` bison -d syntax.y ``` 以上命令将生成`syntax.tab.c`和`syntax.tab.h`两个文件,其中`syntax.tab.c`包含了语法分析器的C代码。 (3)编译C代码并生成可执行文件,例如: ``` gcc syntax.tab.c -o syn ``` 以上命令将生成可执行文件`syn`,可以运行该文件并输入SysY代码进行语法分析。 以上就是使用FlexBison实现SysY词法分析器和语法分析器的简要介绍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值