基于LEX的词法分析器实验报告

2018-12-08 18:34

编译原理课程实验报告

实验名称:基于LEX的词法分析器 学生姓名:赵宁 学生学号: 2013020109 指导教师 毛静

一、实验目标

自动构造C-语言的的词法分析器,要求能够掌握编译原理的基本理论,,理解编译程序的基本结构,掌握编译各阶段的基本理论和技术,掌握编译程序设计的基本理论和步骤.,增强编写和调试高级语言源程序的能力,掌握词法分析的基本概念和实现方法,熟悉C-语言的各种Token。

二、实验原理及方法

Lex输入文件由3个部分组成:定义集(definition),规则集(rule)和辅助程序集(auxiliary routine)或用户程序集(user routine)。这三个部分由位于新一行第一列的双百分号分开,因此,Lex输入文件的格式如下

{definitions} %% {rules} %%

{auxiliary routines}

而且第一部分用“%{”和“%}”括起来。

第一和第三个部分为C语言的代码和函数定义,第二个部分为一些规则。 定义正则表达式如下

ID = letter letter* NUM = digit digit* Letter = a|?|z|A|?|Z Digit = 0|?|9

Keyword = else|if|int|return|void|while

Special symbol = +|-|*|/|<|<=|>|>=|==|!=|=|;|,|(|)|[|]|{|}|/*|*/ White space = “” Enter = \\n 在lex中的构造 letter [A-Za-z] digit [0-9]

id ({letter}|[_])({letter}|{digit}|[_])* error_id ({digit})+({letter})+

num {digit}+ whitespace [ \\t]+ enter [\\n]+ 构造DFA图

三、实验内容

? Win7下lex 与 yacc的安装配置; ? 利用Parser Genarator的词法分析器构造

四、实验步骤

1) Win7下lex 与 yacc的安装配置

1、lex的安装

首先,下载下载flex和bison.

其次,安装完毕后,将c:\\gnuwin32\\lib里面的libfl.a和liby.a复制到C:\\MinGW\\lib里面。

再者,设置环境变量。 最后,测试安装是否成功。 2、使用lex生成此法分析器:

新建文本文件,更改名称为a.lex,敲入下面代码-------词法分析器的源代码 %{

int wordCount = 0; int numcount = 0; %}

chars [A-Za-z\\_\\'\\.\\\numbers ([0-9])+ delim [\whitespace {delim}+ words {chars}+ %%

while {ECHO; printf(\{words} { wordCount++;

/* increase the word count by one*/ } {whitespace} { /* do nothing*/ }

([0-9])+ { numcount++; /* one may want to add some processing here*/ %%

void main() {

printf(\

yylex(); /* start the analysis*/

printf(\

printf(\

return 0; }

int yywrap() { return 1;

} }

2、新建文本文件,更名为b.c,敲入下面代码 --------此为输入源代码 asd asdf 23 q a1 b2 !#@ while

3、打开菜单,运行,输入cmd。 输入:cd 文件夹路径

输入:flex a.lex 回车后生成一个 lex.yy.c文件

输入:gcc -o a lex.yy.c -lfl 回车后生成一个a.exe文件,现在我们已得到了一个简易的词法分析器,下面就是运用次词法分析器,分析下b.c文件

输入:a.exe a.txt 回车后生成一个a.txt文件

2) 利用Parser Genarator的词法分析器构造

? 在Lex中的规则定义构造 定义识别保留字规则

\{Upper(yytext,yyleng); printf(\行\

printf(\保留字 定义识别数字规则 {num}

{printf(\行\

printf(\数字 定义识别专用符号规则

\/\

{printf(\行\

printf(\特殊符号 定义识别标识符规则 {id} {printf(\行\

printf(\标识符


基于LEX的词法分析器实验报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:综合性医院--设计任务书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: