flex & bison学习(一)

编译器是软件开发中的核心部件,其作用是其他任何软件所不能取代的。编译器在工作过程中,往往完成如下的任务:

  1. 读取源代码并且获得程序的结构描述
  2. 分析程序结构,并且生成相应的目标代码

在UNIX早期时代,编写一个编译器是一件非常耗时的工作。人们为了简化开发过程,开发了Lex和YACC程序来解决第一个任务,根据用户描述的语言,生成能够解决问题的C/C++语言代码,供开发者使用。

  1. 将源代码文件分解为各种词汇(Lex)
  2. 找到这些词汇的组成方式(YACC)

GNU软件协会开发了Flex和BISON,其功能与LEX和YACC基本兼容,并且在Lex和YACC提供的功能的基础上进行了各种扩展。

 

下面是一个统计单词个数的flex代码,类似于unix下的wc

/* fb1-1 just like unix wc */
%{
int chars = 0;
int words = 0;
int lines = 0;
%}

%%

[a-zA-Z]+    { words++; chars += strlen(yytext); }
\n        { chars++; lines++; }
.        { chars++; }

%%

main()
{
  yylex();
  printf("%8d%8d%8d\n", lines, words, chars);
}

用flex进行编译

$ flex fb1-1.l

$ cc lex.yy.c -lfl

$ ./a.out

This is a test.

^D

即可看到单词结果

其中

int chars = 0;
int words = 0;
int lines = 0;

三句作为第一段定义了三个变量,并初始化

第二段为统计,使用正则表达式进行匹配

第三段为主函数,每段之间用%%号分开

【手写数据库toadb】语言解析器,编程语言是这样被解析理解,解析器利器flexbison,解析树与逆波兰式 在当今信息化时代,数据已经成为企业和个人最为宝贵的资产之。为了有效地管理和利用这些数据,数据库技术应运而生,并得到了广泛的应用。目前市场上已经有很多成熟的数据库产品,如MySQL、Oracle、PostgreSQL等,它们提供了丰富的功能和性能,满足了不同场景的需求。然而,这些数据库产品的庞大和复杂也让很多人感到困惑和不解,不知道数据库内部的运作机制和原理。为了解决这个问题,我们开发了toadb数据库。toadb的目标是以最基础的骨架来搭建个数据库,让人们能够更清晰地了解数据库的本质和运作原理。 阅读详情

相关推荐

深入理解flexbison在编译器中的应用

本文通过详细分析书籍章节中提供的flexbison输入文件,探讨了它们在创建编译器时的具体作用和实现过程。文章不仅展示了如何使用这些工具来解析源代码,生成语法树,还演示了如何处理编译过程中的各种符号和规则。...

weixin_35987118的博客 485

flexbison(中文版)带目录

FlexBison的工具书。你会找到适用于新手的修订教程和适用于高级用户的参考资料,以及对每个程序的基本用法的解释,并且运用它们创建简单、独立的应用程序。

flexbison 中文版 第二版 高清.pdf

编译器

flex&bison 学习笔记

最近在学习开源数据库 PostgreSQL 的解析器部分,需要用到 flexbison,花了些时间学习下,把目前已经搞清楚的地方和大家交流交流。如果有不对的地方,欢迎指正 1. flexbison 是什么东西?用来干什么的? flexbison 是两个用来生成程序的工具(这两个工具的用途很广泛,这里只说它在 PostgreSQL 中的使用)。在 PostgreSQL 中,

youngtiger86的专栏 7034

BisonFlex学习

GUN官方文档 Bison文档

一辈子太久只争朝夕的博客 1942

编译原理 · Flex & Bison 入门到实战教学

本文是篇关于编译原理中FlexBison工具的实战教学文章,主要面向已学习过编译原理理论、希望动手实践的读者。文章分为五个部分: 整体概述:介绍编译器工作流程中词法分析(Flex实现)和语法分析(Bison实现)的作用及工具关系。 Flex词法分析器详解: 讲解Flex文件的三大结构(定义段、规则段、用户代码段) 核心正则表达式语法和内置变量 提供简单Token识别、关键字与标识符区分等实例 Bison语法分析器详解: 说明Bison文件结构 解释终结符/非终结符/产生式 包含四则运算和变量赋值等进阶实

2401_88644562的博客 511

FlexBison学习笔记

部分 简单了解FlexBison 1、FlexBison 简介 FlexBison(前身分别为Lex和Yacc),是Linux下两个用来生成程序的工具,它们生成的程序分别叫做词法分析器和语法分析器。词法分析把输入分割成个个有意义的词块,称为记号(token);语法分析则确定这些记号是如何彼此关联的。 举个例子:Flex文件定义pattern(什么是黄豆,什么是绿豆……),输入文件(袋豆子)通过Flex处理(词法分析),将输入划分为段段的token(将输入的豆子个个摘出来),从而执行不同

qq_39632811的博客 8156

词法分析flex & 语法分析bison

flex&bison

errorr0 3882

Win flex-bison 的简单使用

Win flex-bison 提供了 flex bison for Windows 的另外种移植,将GNU m4宏处理器源代码集成进win flex-bison,不依赖Msys,Msys2,Cygwin 提供的模拟类Unix运行环境,不依赖GNU m4宏处理器便可生成C目标文件。 sourceforge.net/projects/winflexbison/ Win flex-bison is a port Flex & Bison tools to the Windows platform

gocad的专栏 1万+

实习日志(1)初识flex & bison (计算器的设计)

我怎么也没想到来公司了竟然是做编译原理相关的工作。  毕竟没有学过编译原理 ,看到正则表达式就晕了。T_T 刚刚拿到flex & bison 这本书的时候 感觉头雾水,完全知道干什么的。第天看了词法分析工具flex。直接用flex写出统计单词,行数,字符数的程序,比起直接用C++去模拟,简单的多了。顿时就感觉这个东西好叼。然后就看到了bison 这个这个东西, 后来才懂flex & biso

非确定有限状态自动机 2215

flexbison实例分析

创建test.l文件,编写词法分析规则 %{ #include <stdio.h> #include "test_yacc.h" //因为使用了bison在test_yacc.h中自动生成的token枚举 extern int yylval; //yylval定义在bison库中 %} number [0-9] %% {number}+ { yylval = atoi(yytext); printf("number: %d ...

编码人生 2708

FlexBison 示例项目教程

FlexBison 示例项目教程 项目介绍 flex-bison-example 是个展示如何使用 FlexBison 编写个简单计算器的开源项目。Flex个快速词法分析器生成器,而 Bison个通用的解析器生成器。这个项目通过个具体的示例,帮助开发者理解如何结合使用这两个工具来构建个基本的计算器应用。 项目快速启动 环境准备 确保你已经安装了 Flex 和 Bis...

gitblog_00895的博客 1059

在MiniOB源码中学习使用FlexBison解析SQL语句-第二节

我们可以在bison文件的定义部分,使用如下的代码定义token添加完成之后,再次运行使用bison生成文件,能够得到和两个文件。虽然,bison生成文件没有报错,但是生成出来的文件却是存在问题。经过我的番研究,发现问题出现在语义值上。bison中默认的语义值是int。= nullptr)这是产生式的语义计算部分,文章里面看不到错误。我现在告诉你的类型是int,而现在我尝试将个指针赋值给int。

A_zyx0808的博客 1127

基于flex/bison工具生成sysY2022文法的词法/语法分析器

基于flex/bison工具生成sysY2022文法的词法/语法分析器

Martin_666的博客 6279

Bison学习笔记】1:生成简易的语法分析程序,使Bsion和Flex协同工作

简述 Bison是在Yacc上改写并添加了大量特性后诞生的语法分析生成器,在编译前端(词法分析->语法分析->语义分析)中处在中间的位置,它可以用来生成特定的语法分析程序。 安装Bison: apt-get install bison 没有专用于Bison的IDE,可以在VSCode安装Lex Flex Yacc Bison插件,可以让Bison语法高亮。 Bsion和Flex协同工...

大桔骑士的学习笔记 4650

在Windows系统中使用vscode配置CMake和win_flex_bison实现LEX和YACC

最近在学校的专业课《编译原理》学习LEX和YACC,在Windows中使用vscode和CMake配置flex&bison

qq_74959300的博客 1063
上一篇: Web设计精髓(转)
下一篇: Cisco 3925如何找到E1接口
weixin_34187822
博客等级 码龄11年 6205粉丝 144原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值