基于LEX的C语言词法
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
器
实验二 C-语言的词法分析器(基于Lex)
1. 课程设计目标
1.构造基于lex的词法分析器,以掌握编译原理的基本理论为基础,理解编译程序的基本结构,熟悉编译各阶段的基本理论和技术,掌握编译程序设计的基本理论和步骤,同时增强编写和调试高级语言源程序的能力,掌握词法分析的基本概念和实现
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
,最终能开发出一个可以使用的稳定的面向saas基于lex的词法分析器。
2. 分析与设计
基于Parser Genarator的词法分析器构造方法
Lex输入文件由3个部分组成:定义集(definition),
规则
编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf
集(rule)和辅助程序集(auxiliary routine)或用户程序集(user routine)。这三个部分由位于新一行第一列的双百分号分开,因此,Lex输入文件的格式如下
{definitions}
%%
{rules}
%%
{auxiliary routines}
而且第一部分用“%{”和“%}”括起来。
第一和第三个部分为C语言的代码和函数定义,第二个部分为一些规则。 定义正则
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达式如下
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]+
在Lex中的规则定义构造
定义识别保留字规则
"int"|"else"|"return"|"void"|"if"|"while" {Upper(yytext,yyleng);
printf("%d 行 ",lineno); printf("%s reserved word\n",yytext);}//保留字
定义识别数字规则
{num}
{printf("%d 行 ",lineno); printf("%s NUM\n",yytext);}//数字 定义识别专用符号规则
","|";"|"("|")"|"{"|"}"|"*"|"/"|"+"|"-"|">"|"<"|">="|"<="|"=="|"!="|"="|"/*"|"*/"
{printf("%d 行 ",lineno); printf("%s special symbol\n",yytext);}//特殊符号
定义识别标识符规则
{id} {printf("%d 行 ",lineno);
printf("%s ID\n",yytext);}//标识符 定义识别错误的字符串规则
当开头为数字的后面为字母的字符串时,是错误的标识符。
{error_id} {printf("error:%s\n",yytext);}//以数字开头的字符自动报错
定义忽略空格规则
{whitespace} {/* skip whitespace */}//忽略空格
定义忽略回车规则
{enter} {lineno++;}//遇到回车自动加行号忽略
辅助程序集中包括
主函数main ()和辅助函数toupper()。
3. 程序代码实现
Lex代码
//定义集,包括头文件和变量定义
%{
#include
#include #include #include
int lineno=1;//定义行号
%}
//定义正则表达式
letter [A-Za-z] //字母
digit [0-9] //数字
id ({letter}|[_])({letter}|{digit}|[_])* //开头为字母的标识符 error_id ({digit})+({letter})+ //开头为数字的错误标识符 num {digit}+ //数字集合 whitespace [ \t]+ //空格
enter [\n]+ //回车
//定义识别规则
%%
//识别保留字
"int"|"else"|"return"|"void"|"if"|"while"
{Upper(yytext,yyleng); printf("%d 行 ",lineno); //打印行号
printf("%s reserved word\n",yytext);}//输出保留字 //识别数字
{num}
{printf("%d 行 ",lineno); //打印行号
printf("%s NUM\n",yytext);}//输出数字 //识别专用符号
","|";"|"("|")"|"{"|"}"|"*"|"/"|"+"|"-"|">"|"<"|">="|"<="|"=="|"!="|"="|"/*"|"*/"
{printf("%d 行 ",lineno); //打印行号
printf("%s special symbol\n",yytext);}//输出特殊符号 //识别标识符
{id} {printf("%d 行 ",lineno);//打印行号
printf("%s ID\n",yytext);}//打印标识符 //识别错误的标识符
{error_id} { printf("%d 行 ",lineno); printf("error: %s\n",yytext);}//以数字开头的字符自动报错 //识别空格
{whitespace} {/* skip whitespace */}//忽略空格
//识别回车
{enter} {lineno++;}//遇到回车自动加行号忽略
%%
//转换大小写
Upper(char *s,int l){ int i;
for(i=0;i
本文档为【基于LEX的C语言词法分析器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。