flex & bison学习(一)

简介: 编译器是软件开发中的核心部件,其作用是其他任何软件所不能取代的。编译器在工作过程中,往往完成如下的任务: 读取源代码并且获得程序的结构描述 分析程序结构,并且生成相应的目标代码 在UNIX早期时代,编写一个编译器是一件非常耗时的工作。

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

  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;

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

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

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

相关文章
|
10月前
|
Ubuntu
ubuntu源码安装flex和bison
ubuntu源码安装flex和bison
385 0
|
前端开发 容器
Flex入坑指南
弹性布局flex是一个几年前的CSS属性了,说它解放了一部分生产力不为过。至少解放了不少CSS布局相关的面试题 :) 之前网上流行的各种XX布局,什么postion: absolute+margin,float+padding,各种都可以使用flex来取代之。
1389 0
|
内存技术 开发工具 数据可视化
|
XML JavaScript 数据格式
|
XML JavaScript Java
|
自然语言处理 Unix SQL
OpenCASCADE Expression Interpreter by Flex & Bison
OpenCASCADE Expression Interpreter by Flex & Bison eryar@163.com Abstract. OpenCASCADE provide data structure of any expression, relation or function used in mathematics.
1314 0
|
Web App开发 JavaScript Java
flex学习
早就想弄个flex的东西了...总是没有心情弄..有的时候项目让人心力憔悴...   最近,,想着是破罐子破摔..弄点别的东西...换个心情..然后在去弄下项目...(已经快接近尾声了)   总是在开发的第一线..技术上面什么都弄..公司里面还要应付其他同事的问题...   能帮助别人就帮助吧..本人也没有别的什么有点..就代码上面略有研究.(投入的时间多了自然就有所领悟了)   1,先弄个s
1288 0
|
编译器
FlexPaper源码编译
FlexPaper是一个Flex中直接浏览PDF文件的控件,例如百度文库这种形式,我们可以对FlexPaper的源码进行修改,完成我们的需求。 首先下载FlexPaper的源码   下载点击我 一、导入Flex库项目文件 将flexswcnew.fxp 文件导入flex中。
818 0
Flex学习笔记(Day 2)
LineChart ViewStack控件 //一种方法 var url:String; url = "http://www.
694 0