文章目录
一、实验要求
- 一、实验要求
- 二、使用flex
- 三、测试样例
- 四、编译代码
- 五、测试结果
编写一个程序对使用 C–语言书写的源代码进行词法分析,并打印分析结果。学习词法分析工具 Flex的使用方法,并使用 C 语言完成程序。
- 基本要求(6%) a. 输出C–文法规定的基本词法分析结果(27种token); b. 输出未定义的标识符; c. 识别单行注释。
- 附加要求(6%) a. 识别八进制和十六进制数; b. 识别指数形式浮点数; c. 识别多行注释。
编写 flex 文件,规范正则表达式进行单词匹配:
-
第一部分:正则表达式
%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
五、测试结果
