Flex2.5用户手册(一)

原创 2003年10月25日 22:28:00

Flex2.5用户手册(一)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

名称:

flex – 快速词法分析器生成器(fast lexical analyzer generator

 

摘要:

flex [-bcdfhilnpstvwBFILTV78+? -C[aefFmr] -ooutput -Pprefix -Sskeleton] [--help --version] [filename ...]

 

录:

本手册将介绍flex,一个用于生成基于文本进行模式匹配的程序的工具。

本手册包括指南和参考两部分:

    1Flex概要

    2.简单的例子

3Flex的输入文件格式

    4.模式

          flex使用扩展的正规表达式

    5.输入是如何被匹配的

          规则决定了什么需要匹配

6.动作

          用于指定当模式匹配后执行的操作

    7.扫描器的生成

          关于Flex生成的词法扫描器的细节;

          如何控制输入源;

    8.开始条件(Start Conditions

          将上下文(context)概念引入到生成的扫描器中

          管理微型扫描器(mini-scanners

9.多个输入缓冲区(Multiple Input Buffers

      如何使用多个输入源;

      如何使字符串扫描代替文件扫描

   10.文件结束规则(End-of-file Rules

           用于匹配输入结束的特殊规则

11.其它相关宏定义

           可用于动作中的宏的汇总

   12.用户可以使用的值

           在动作中使用的值的汇总

   13.和Yacc的接口

           连接flex扫描器和yacc语法分析器

14.选项

           flex的命令行选项和"%option"指令

    15.性能考虑

            如何让你的扫描器尽可能得快

16.生成 C++ 扫描器

        生成C++扫描器类的功能(实验性的)

    17.与LexPOSIX的不兼容性

             flex AT&T lex以及POSIX  lex 标准的区别

    18.诊断

             flex(或flex生成的扫描器)产生的错误并不明显

    19.文件

       flex使用的文件

    20flex的不足之处和它的Bugs

         了解flex存在的问题

    21.参阅

                 其它文档以及相关的工具

    22.作者

                 联系方式

Flex概要

flex是一个用于生成扫描器的工具,扫描器可识别文本中的词法模式。flex从给定的文件中读取,或者从标准输入中读取(当没有给定文件时)有关要生成的扫描器的说明。这种说明的格式是一对正规表达式和C代码,称之为规则。flex的输出是名为lex.yy.cC源程序,在lex.yy.c中定义了一个名为yylex()的函数。lex..yy.c可以被编译,并使用-lfl链接选项同flex库链接,以生成可执行文件。执行该文件,它会分析它的输入,察看是否满足正规表达式,只要它发现一个,就会执行相应的C代码。

 

简单的例子

    首先介绍一些简单的例子来演示如何使用flex。下面的flex输入规范定义了一个扫描器,每当它遇到字符串“username”时,就要用户的登陆名替换掉该字符串。

    %%

    username    printf( "%s", getlogin() );

   默认情况下,任何被该扫描器匹配的文本都被拷贝到输出中,因此该扫描器的作用就是将它的输入内容拷贝到输出中,当遇到“username”时将其扩展。在本例中,输入中只有一个规则。“username”就是一个模式而“printf”就是该模式对应的动作。“%%”表示规则的开始。

 

在看另外一个例子:

            int num_lines = 0, num_chars = 0;

 

    %%

    /n      ++num_lines; ++num_chars;

    .       ++num_chars;

 

    %%

    main()

            {

            yylex();

            printf( "# of lines = %d, # of chars = %d/n",

                    num_lines, num_chars );

            }

   这个扫描器统计输入中的字符数和行数(除了最后报告统计结构,它不产生其他输出)。第一行声明了两个全局变量,”num_lines””num_chars”yylex()和在第二个” %%”后定义的main()均可访问这两个全局变量。该扫描器有两个规则,一个匹配一个换行符(”/n”)如果匹配则累加num_linesnum_chars,另一个规则匹配除换行符之外的任何字符(由正规表达式”.”表示)。

一个稍微复杂点的例子:

/* scanner for a toy Pascal-like language */

    %{

    /* need this for the call to atof() below */

    #include <math.h>

%}

 

    DIGIT    [0-9]

ID       [a-z][a-z0-9]*

 

    %%

    {DIGIT}+    {

                printf( "An integer: %s (%d)/n", yytext,

                        atoi( yytext ) );

                }

 

    {DIGIT}+"."{DIGIT}*        {

                printf( "A float: %s (%g)/n", yytext,

                        atof( yytext ) );

                }

 

    if|then|begin|end|procedure|function        {

                printf( "A keyword: %s/n", yytext );

                }

 

    {ID}        printf( "An identifier: %s/n", yytext );

 

    "+"|"-"|"*"|"/"   printf( "An operator: %s/n", yytext );

 

    "{"[^}/n]*"}"     /* eat up one-line comments */

 

    [ /t/n]+          /* eat up whitespace */

 

    .           printf( "Unrecognized character: %s/n", yytext );

 

    %%

 

    main( argc, argv )

    int argc;

    char **argv;

        {

        ++argv, --argc;  /* skip over program name */

        if ( argc > 0 )

                yyin = fopen( argv[0], "r" );

        else

                yyin = stdin;

       

        yylex();

        }

这个例子是一个针对类Pascal语言的扫描器的雏形,它可识别不同类型的记号(token)并且能报告它看到的东西。

 

接下来的部分将解释这个例子的细节。

LuaInterface用户手册

传奇猎刃www.91cqlr.com
  • yiyi31130108
  • yiyi31130108
  • 2014年04月15日 09:29
  • 5655

Opscenter用户手册

Opscenter用户手册 1.       OpsCenter简介 DataStaxOpsCenter是一个可视化管理和监控Apache Cassandra和DataStax Enterpr...
  • achejq
  • achejq
  • 2016年04月27日 10:38
  • 1597

Redmine 用户手册

Redmine 用户手册 基于Redmine 0.9 版本 目录 1   说明2   用户账号3   登录4   注册5   项目概述6   项目活动7   ...
  • carrie0728
  • carrie0728
  • 2016年08月08日 16:41
  • 1115

spring2.0.x及2.5的用户手册(PDF)

  • 2007年11月30日 14:49
  • 4.58MB
  • 下载

Joolma 2.5 英文版 用户手册

  • 2012年05月22日 09:15
  • 28.17MB
  • 下载

MapABC Flex API 示例 代码 用户手册 开发包

  • 2012年05月28日 20:09
  • 43.61MB
  • 下载

twaver-flex中文用户手册

  • 2010年12月14日 00:38
  • 1.63MB
  • 下载

ExoPlayer用户手册

贴上原网址:https://google.github.io/ExoPlayer/guide.html 非完全翻译,有需要可以原网址自取,我发现网上也蛮多这个指导的翻译,可以去看看~ 开始啦!: ...
  • ljm1995
  • ljm1995
  • 2017年08月10日 16:37
  • 333

Box2D v2.1.0用户手册翻译 - 第09章 接触(Contacts)

转自:Complx_ok 第09章 接触(Contacts) 9.1 关于 接触(contact)是由 Box2D 创建的用于管理fixture间碰撞的对象。接触有不同的种类,它...
  • xu_cq
  • xu_cq
  • 2013年02月26日 20:40
  • 554

Box2D v2.1.0用户手册翻译 - 第08章 关节(Joints)

第08章 关节(Joints) 8.1 关于 关节用于把物体约束到世界,或约束到其它物体上。在游戏中, 典型例子有木偶, 跷跷板和滑轮。用不同的方式将关节结合起来使用,...
  • deruiyu93
  • deruiyu93
  • 2014年01月16日 08:43
  • 760
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Flex2.5用户手册(一)
举报原因:
原因补充:

(最多只允许输入30个字)