编译原理实验-用FLEX自动构造词法分析程序

  							用FLEX自动构造词法分析程序

一、实验目的

  • 学习使用词法分析程序自动构造工具 Flex
  • 熟悉 LEX LEX源程序语法 源程序语法 源程序语法
  • 掌握词法 分析程序的自动构造方法
    二、实验要求
    基础内容
    -1.实现以下步骤, 掌握Flex的工作过程
    i. 构造LEX源程序, 例如命名为Test.Lex
    ii. 编译LEX源程序, 生成C语言词法分析程序lex.yy.c, 步骤如下:
    在命令提示符下执行编译flexTest.Lex得到目标文件lex.yy.c
    iii. 编译lex.yy.c,产生可执行程序lex.yy.exe
    iv. 运行生成的可执行文件lex.yy或lex.yy< InputFile
    2.测试目录SRC_FLEX中的范例程序,了解其功能及实现。
    wc目录下的lex文件生成字数统计程序,打印出行数、单词数、字符数。
    fb1-1.l读取标准输入
    fb2-1.l读入一个文件
    fb2-2.l读入多个文件
    3.输入一个C源程序文件, 用FLex实现以下任务
    a) 将文件中每个非空的空白符号序列替换为单个空格。
    b) 将文件中所有关键字转换为大写字母。
    c) 将文件中所有标识符转换为小写字母,且以下划线开头。
    d) 将文件中所有指数形式的常量转换为小数形式。
    例如:2.5e3被转换为2500
    3.7e-2被转换为0.037
    e)添加行号。
    f) 将转换后的文件存入另一个文件。
    g)打印出输入文件的行数、单词数、字符数。
    代码:
    点击>代码<

注意:
//定义:头文件声明部分
//正则表达式声明部分
//[\ \t]+,[\t\n],[ ]+非空的空白符表示方式

//关键字的正则表达式

//[A-Za-z]+/[a-zA-Z][a-zA-Z0-9]*,标识符的表示方法

//指数表示形式

//规则声明部分

//a:在遇到多个空格的时候,将他们转换为单个空格符

//b:将关键字转换为小写字母,他们既是字符,也是一个单词。

//c:标识符转换为小写字母,并且以下划线开头,同样会是一个单词,会是字符的集合

//d:将指数转换为小数形式,不是单词,但我认为这是字符了

//e:添加行号

//用户代码
//在文件(或输入)的末尾调用。如果函数的返回值是1,就停止解析。 因此它可以用来解析多个文件

统计字符,单词,行数方法

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

\n { chars++; lines++; }

. { chars++; }

你可能感兴趣的:(编译原理)