flex词法研究器.docVIP

  • 2
  • 0
  • 约6.84千字
  • 约 11页
  • 2018-11-21 发布于江苏
  • 举报
flex词法研究器

实验项目一 词法分析器 一、实验类型 本实验为验证性实验。 二、实验目的 1.通过本实验加深对词法分析程序的功能及实现方法的理解; 2.使用flex实现词法分析程序。 三、准备工作和预备知识 Lex(Lexical Analyzar?词法分析生成器)是Unix下十分重要的词法分析工具。经常用于语言分析,公式编译等广泛领域。 1.Lex(Lexical Analyzar)?初步示例 先看简单的例子: 一个简单的Lex文件?exfirst.l?内容: %{ #include stdio.h %} %% [\n]??????????????????; [0-9]+????????? printf(Int?????: %s\n,yytext); [0-9]*\.[0-9]+????? printf(Float???: %s\n,yytext); [a-zA-Z][a-zA-Z0-9]*??printf(Var?????: %s\n,yytext); [\+\-\*\/\%]???????printf(Op??????: %s\n,yytext); “.”??????????????printf(Unknown : %c\n,yytext[0]); %% 在命令行下执行命令flex解析,会自动生成lex.yy.c文件: [root@localhost liweitest]flex exfirst.l 进行编译生成parser可执行程序: [root@localhost liweitest]cc -o parser lex.yy.c –ll 或者 [root@localhost liweitest]gcc lex.yy.c –ll -o parser [注意:如果不加-ll链结选项,cc编译时会出现以下错误,后面会进一步说明。] /tmp/cciACkbX.o(.text+0x37b): In function `yylex: : undefined reference to `yywrap /tmp/cciACkbX.o(.text+0xabd): In function `input: : undefined reference to `yywrap? 创建待解析的文件?file.txt: title i=1+3.9; a3=909/6 bcd=4%9-333 通过已生成的可执行程序,进行文件解析。 [root@localhost liweitest]# ./parser file.txt Var?????: title Var?????: i Unknown : = Int?????: 1 Op??????: + Float???: 3.9 Unknown : ; Var?????: a3 Unknown : = Int?????: 909 Op??????: / Int?????: 6 Var?????: bcd Unknown : = Int?????: 4 Op??????: % Int?????: 9 Op??????: - Int?????: 333 到此Lex用法会有个直观的了解: a.定义Lex描述文件 b.通过lex,flex工具解析成lex.yy.c文件 c.使用cc或gcc编译lex.yy.c生成可执行程序 再来看一个比较完整的Lex描述文件??exsec.l??: %{ #include stdio.h int linenum; %} %% “title”????????????????showtitle(); [\n]?????????????????linenum++; [0-9]+?????????????printf(Int?????: %s\n,yytext); [0-9]*\.[0-9]+????????printf(Float???: %s\n,yytext); [a-zA-Z][a-zA-Z0-9]*??printf(Var?????: %s\n,yytext); [\+\-\*\/\%]???????printf(Op??????: %s\n,yytext); “.”???????????????printf(Unknown : %c\n,yytext[0]); %% showtitle() { printf(----- Lex Example -----\n); } int main() { linenum=0; yylex(); /*?进行分析?*/ printf(\nLine Count: %d\n,linenum); return 0; } int yywrap() { return 1; } 进行解析编译: [root@localhost liweitest]flex ex

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档