编译原理 — 用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构造词法分析器的主要内容,如果未能解决你的问题,请参考以下文章