您当前的位置: 首页 > 

蔗理苦

暂无认证

  • 4浏览

    0关注

    88博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

2021-10-10 编译原理实验1——词法分析

蔗理苦 发布时间:2021-11-04 02:08:33 ,浏览量:4

文章目录
    • 一、实验要求
    • 二、使用flex
    • 三、测试样例
    • 四、编译代码
    • 五、测试结果

一、实验要求

编写一个程序对使用 C–语言书写的源代码进行词法分析,并打印分析结果。学习词法分析工具 Flex的使用方法,并使用 C 语言完成程序。

  • 基本要求(6%) a. 输出C–文法规定的基本词法分析结果(27种token); b. 输出未定义的标识符; c. 识别单行注释。
  • 附加要求(6%) a. 识别八进制和十六进制数; b. 识别指数形式浮点数; c. 识别多行注释。
二、使用flex

编写 flex 文件,规范正则表达式进行单词匹配:

  1. 第一部分:正则表达式

    %option yylineno
    digit [0-9]
    letter [a-zA-Z]
    unsignedint [1-9]{digit}*
    
    SPACE [ ]
    LF [\n\r\f\v\t]
    FLOAT [+-]?({digit}+)?\.{digit}+?([eE][+-]?(0|[0-9]*))?
    ILLEGALFLOAT ([+-]?({digit}+)?[eE][+-]?{digit}*\.{digit}*)|([+-]?({digit}+)?[eE]{letter}*)
    ID ({letter}|_)({letter}|_|{digit})*
    SEMI ;
    COMMA ,
    ASSIGNOP =
    RELOP (>|=| 1) {
            if(!(yyin = fopen(argv[1], "r"))) {
                perror(argv[1]);
                return 1;
            }
            while (yylex() != 0);
        }
        return 0;
    }
    

    main 函数读取文件,依次匹配每一个 token,并进行相应的打印输出。

三、测试样例
0547 089 0x5c4ad 0X345 0X1D7E 0x4m4
1.23 1.3e0 13.5e9 2.e-23 3. .08 2er 15e 1e2.5
// note1
/* this
is a long long comment
*/
h = 5 / 2 // note2
}
四、编译代码

输入指令:

>>> flex lizi.l
>>> gcc lex.yy.c -lfl -o scanner

得到可执行程序 scanner,我们就可以用这个程序进行编译文件:

>>> ./scanner text.cmm
五、测试结果
关注
打赏
1657823434
查看更多评论
立即登录/注册

微信扫码登录

0.1576s