美文网首页
一. 初识Flex:写一个wc程序

一. 初识Flex:写一个wc程序

作者: Dakini_Wind | 来源:发表于2019-02-14 17:50 被阅读16次

flex是用来生成程序的工具(最初用来生成编译器),它所生成的程序能够处理结构化输入
基础:了解正则表达式编译原理相关知识(词法分析器、语法分析器、自动机等)。

一个简单的Flex程序:

这个程序实现字数统计功能,这个程序可以读入一个文件,然后报告这个文件的行数单词数字符数

$ vim WordCount.l

用vim创建文件拓展名为llt的文件,输入以下内容:

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

main(int argc, char **argv)
{
    yylex();
    printf("%8d%8d%8d\n", lines, words, chars);
}

flex程序包含三个部分,各部分之间通过仅有%%的行来分割,三个部分介绍如下:
(1)声明部分
%{%}之间的代码会被原样照抄到生成的C文件的开头部分。
在这个例子中,它只是用来设定行数、单词数和字符数的变量。
(2)规则部分
模式处在一行的开头处,接着是模式匹配时所需要执行的C代码(这儿的C代码是用{}括住的一或多行语句。)
模式必须在行首出现。(flex认为空白开始的行都是代码)
(3)C代码部分
末尾的C代码是我们的主程序,它负责调用flex提供的词法分析例程yylex(),并输出结果。


接下来将它编译:

$ flex -o WordCount.yy.c WordCount.lt 
$ cc -o WordCount WordCount.yy.c -lfl

-o 用于确定输出文件,如果不加,flex默认生成lex.yy.c,gcc默认生成a.out
-lfl 用于链接flex库( flex library)
cc命令其实就是gcc,以后将全部写为gcc,可以证实如下:

$ ls -l /usr/bin/cc
lrwxrwxrwx 1 root root 3 11月 29 19:48 /usr/bin/cc -> gcc

执行的方式有许多(第一种直接输入,后两种将文件作为标准输入):

$ ./WordCount 
Hello World~   
Yeah
       2       3      18
# 或者
$ ./WordCount < file 
       1       1      10
# 或者
$ cat file | ./WordCount 
       1       1      10

真正的wc(字符统计)程序与上述定义有所不同:没有空白字符的字符串。
所以需略作修改:

[^\t\n\r\f\v ]+  { words++; chars += strlen(yytext); }

相关文章

  • 一. 初识Flex:写一个wc程序

    flex是用来生成程序的工具(最初用来生成编译器),它所生成的程序能够处理结构化输入。基础:了解正则表达式和编译原...

  • AMF与Flex BlazeDS漏洞

    1. Flex BlazeDS 1.1 Flex Flex是一个开源应用程序框架,由Flex类库(ActionSc...

  • 初识flex

    Flex是Flexible Box的缩写,弹性布局,为盒状模型提供最大的灵活性。 1、浏览器支持情况 目前,Fle...

  • 微信小程序开发之flex布局笔记

    微信小程序开发推荐使用flex布局。本人在平时的小程序开发中,都是优先使用flex布局。对于一个搞不懂css的后端...

  • 一.初识T-Flex

    介绍 1.T-FLEX CAD(T-FLEX)是一种基于Parasolid的参数化CAD软件应用程序,用于3D实体...

  • Linux wc命令

    wc -c filename :显示一个文件的字节数wc -m filename :显示一个文件的字符数wc -...

  • linux-wc

    wc -m filename:显示一个文件的字符数wc -l filename:显示一个文件的行数wc -L fi...

  • 常用Linux命令汇总

    [TOC] wc 文件相关命令。 wc -c filename:显示一个文件的字节数 wc -m filename...

  • 【2021-10-23】微信小程序flex布局

    微信小程序flex布局flex是一种很方便的布局方式,主要调用方式:

  • Flex布局图文详解

    《微信小程序开发--Flex布局》

网友评论

      本文标题:一. 初识Flex:写一个wc程序

      本文链接:https://www.haomeiwen.com/subject/yjzeeqtx.html