编译原理 — 用Flex构造词法分析器

Posted sunchuangyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译原理 — 用Flex构造词法分析器相关的知识,希望对你有一定的参考价值。

 

基于Flex构造词法分析器

 

【问题描述】设计c语言常见单词的正规式,编制lex源文件,利用flex编译得到词法分析的.c文件,继而对该文件编译得到词法分析器。

【输入形式】输入一段c语言程序

【输出形式】各类单词的token字,或者给出程序中的单词错误。

【样例输入】

int main(){

    int a = 10;

    double b = 20.9;

    if(a <= b)

        a+=b;

    else a = 0;

    return a;

}

 

【样例输出】

line1:(type, int)

line1:(keyword, main)

line1:(bracket, ()

line1:(bracket, ))

line1:(bracket, {)

line2:(type, int)

line2:(identify, a)

line2:(OPT, =)

line2:(integer, 10)

line2:(bracket, ;)

line3:(type, double)

line3:(identify, b)

line3:(OPT, =)

line3:(decimal, 20.9)

line3:(bracket, ;)

line4:(keyword, if)

line4:(bracket, ()

line4:(identify, a)

line4:(OPT, <=)

line4:(identify, b)

line4:(bracket, ))

line5:(identify, a)

line5:(OPT, +=)

line5:(identify, b)

line5:(bracket, ;)

line6:(keyword, else)

line6:(identify, a)

line6:(OPT, =)

line6:(integer, 0)

line6:(bracket, ;)

line7:(keyword, return)

line7:(identify, a)

line7:(bracket, ;)

line8:(bracket, })

 

【样例说明】需要识别的关键字包括void, int, main, double, return, float, if, else, do, while, for, scanf, printf, char, sqrt, abs, 运算符(算术、关系、逻辑、位);需要识别的其他单词有标识符, 整数(十进制形式、指数形式),实数(十进制形式、指数形式),字符串;过滤注释及空格。

【评分标准】根据设计文档的质量、lex文件的正确性,代码的正确性、代码的时间空间复杂度、识别单词的种类等综合评分

以上是关于编译原理 — 用Flex构造词法分析器的主要内容,如果未能解决你的问题,请参考以下文章

编译原理实验:实验一 简单词法分析程序设计(必修)(Python实现)

windows10下词法分析器flex的安装使用编译和运行

P6 词法分析NFA转DFA编译原理

编译原理笔记 1

如何在词法分析器生成器中有效地实现最长匹配?

编译原理词法分析