flex的使用方法在这里就不一一说明了,网上很多,这次是编译原理的第一个作业,因为最近学得东西比较多,所以偷懒使用flex进行词法分析。
下面是tiny语言代码
{ sample progarm in tiny language - computer factorial } read x;{ input an integer } if x < 0 then { don't compute if x <= 0} fact := 1; repeat fact := fact * x; x := x - 1 until x = 0; write fact {output factorial of x} end
就是要使用flex来对上面这段代码进行词法分析,分出哪些是关键字 哪些是运算符等等
首先需要些的是.l文件,这个是flex进行操作的文件
在其中最重要的两个部分 一个就是正则表达式的书写,一个就是识别出来后的操作
下面是demo.l文件的代码
%{ #include "stdio.h" int lineNum; %} digit [0-9]+ keyword read|if|then|repeat|until|write|end letter [a-zA-Z]+ comment \{[^\}]*\} operator ":="|"="|"+"|"-"|"*"|"/"|">"|"<" ignore [","|";"|" "|\t|\n]+ %% {comment} { printf("%s : comment\n",yytext); } {digit} { printf("%s : digit\n",yytext); } {keyword} { printf("%s : keyword\n",yytext); } {letter} { printf("%s : letter\n",yytext); } {operator} { printf("%s : operator\n",yytext); } {ignore} { /*nothing*/ } %% int yywrap() { return 1; } void main() { lineNum = 0; yylex(); return 0; }
都是比较简单的正则表达式
接下来只需要用 flex demo.l命令 即可将demo.l文件编译成一个c文件,然后将这个c文件编译运行后,即可得到一个exe文件,就用这个文件来解析tiny语言,下面是解析结果截图
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。