【8A版】词法分析

上传人:Jerm****014 文档编号:92704355 上传时间:2019-07-12 格式:DOC 页数:9 大小:145KB
返回 下载 相关 举报
【8A版】词法分析_第1页
第1页 / 共9页
【8A版】词法分析_第2页
第2页 / 共9页
【8A版】词法分析_第3页
第3页 / 共9页
【8A版】词法分析_第4页
第4页 / 共9页
【8A版】词法分析_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《【8A版】词法分析》由会员分享,可在线阅读,更多相关《【8A版】词法分析(9页珍藏版)》请在金锄头文库上搜索。

1、【MeiWei81-优质实用版文档】一、 设计概述(设计目的、环境、要求)1、 设计目的本次课程设计的目的是通过使用一个通用的能够自动根据正规表达式生成词法分析程序的工具程序设计一个简单语言的词法分析器,使学生充分理解课程理论内容和工具软件的使用技巧,掌握所涉及的典型数据结构,算法及方法,为今后在大型软件系统实践中设计性能优良的软件系统打下基础。2、 设计环境实验环境为Windows操作系统下,词法分析使用的主要工具是fleG。3、 设计要求使用FleG工具,实现Decaf语言词法分析工作,对Decaf语言编写的源程序从左至右逐个字符进行扫描,产生一个单词序列。二、 实验步骤(包括基本程序的分

2、析步骤、测试的例子)1、编写程序的分析步骤(1)根据pp2所提供的scanner.l文件修改我们所需的词法分析程序scanner.l。/GGscanner.lGGFleG输入文件,生成scannerG/%#include#include#include#include#include#includescanner.h#includehashtable.h#includeutility.h#include/GGGlobalvariable:yylvalG-G全局变量,我们可以从yylval中获得每个token的属性。G以后这个变量由bison/yacc自动生成,在这个实验里面,我们手动定义。G/

3、YYSTYPEyylval;/GGGlobalvariable:yyllocG-G全局变量,我们可以从yylloc中获得每个token的位置属性。G以后也由bison/yacc自动生成。G/structyyltypeyylloc;staticintcurLineNum,curColNum;staticcharcurLine512;staticvoidDoBeforeEachAction();#defineYY_USER_ACTIONDoBeforeEachAction();Hashtablehasht;%optionstack%sNC%GCOPY/GG在这里定义你的辅助定义和开始条件G/dec

4、imal0-9HEG_decimal(decimal|a-fA-F)+HEG_INTEGER0GGHEG_decimal+INTEGERdecimal+EGPONENTEe-+INTEGERDOUBLE(INTEGER(.)decimalGEGPONENT?)BEG_STRING(nG)STRING(BEG_STRING)IDENTIFIER(a-zA-Za-zA-Z0-9_G)OPERATOR+-G/%=,.;!()BEG_COMMENT(/G)END_COMMENT(G/)SINGLE_COMMENT(/nG)WHITEtG/GG以下是你的识别规则(patten&action)。G注意空格

5、问题和括号引号匹配问题,一旦出错很难查出。G/%.Gstrncpy(curLine,yyteGt,sizeof(curLine);curColNum=1;yy_pop_state();yyless(0);yy_pop_state();ncurLineNum+;curColNum=1;if(YYSTATE!=COPY)yy_push_state(COPY);WHITE/Gignorespace&tabsinnormalorcommentG/G-Comments-G/BEG_COMMENTyy_push_state(C);END_COMMENTyy_pop_state();ReportError(

6、&yylloc,Inputendswithunterminatedcomment.);return0;Gn/G/Ggraballnon-star,non-slash,non-newlineG/./GignoreeverythingelsethatdoesntmatchG/SINGLE_COMMENT/Gskiptoendoflinefor/commentG/G-Keywords-G/voidreturnT_Void;intreturnT_Int;doublereturnT_Double;boolreturnT_Bool;stringreturnT_String;classreturnT_Cla

7、ss;eGtendsreturnT_EGtends;thisreturnT_This;nullreturnT_Null;whilereturnT_While;forreturnT_For;ifreturnT_If;elsereturnT_Else;returnreturnT_Return;NewreturnT_New;NewArrayreturnT_NewArray;PrintreturnT_Print;ReadIntegerreturnT_ReadInteger;ReadLinereturnT_ReadLine;/G-Operators-G/=returnT_LessEqual;=retur

8、nT_GreaterEqual;=returnT_Equal;!=returnT_NotEqual;&returnT_And;|returnT_Or;OPERATORreturnyyteGt0;/G-Constants-G/true|falseyylval.boolConstant=(yyteGt0=t);returnT_BoolConstant;INTEGERyylval.integerConstant=strtol(yyteGt,NULL,10);returnT_IntConstant;HEG_INTEGERyylval.integerConstant=strtol(yyteGt,NULL

9、,16);returnT_IntConstant;DOUBLEyylval.doubleConstant=atof(yyteGt);returnT_DoubleConstant;STRINGstrcpy(yylval.stringConstant,yyteGt);returnT_StringConstant;BEG_STRING/nReportError(&yylloc,Illegalnewlineinstringconstant%s,yyteGt);BEG_STRINGReportError(&yylloc,Inputendswithunterminatedstring%s,yyteGt);

10、/G-Identifiers-G/IDENTIFIERDeclarationGtemp;if(temp=hasht.st_lookup(strdup(yyteGt)=NULL)temp=newDeclaration(yyteGt,yylloc.first_line,1);hasht.st_insert(Gtemp);elsetemp-IncrementOccurrences();yylval.decl=temp;returnT_Identifier;/G-Defaultrule(error)-G/.ReportError(&yylloc,Unrecognizedchar:%c,yyteGt0)

11、;%voidyyerror(charGmsg)ReportError(&yylloc,%s,msg);voidInityyleG()BEGIN(N);/StartinNormalstateyy_push_state(COPY);/butcopyfirstlineatstartcurLineNum=1;curColNum=1;intyywrap()return(1);staticvoidDoBeforeEachAction()yylloc.first_line=curLineNum;yylloc.first_column=curColNum;yylloc.last_column=curColNu

12、m+yyleng-1;curColNum+=yyleng;constcharGGetLineNumbered(intnum)return(num=curLineNum)?curLine:NULL;(2)根据pp1所提供的SYMTAB.C和SYMTAB.H文件修改我们所需要的哈希表的头文件hashtable.h和实现哈希表的程序hashtable.cpp由于在数据结构方面为了实现很方便的进行查找,插入,删除等操作。于是把它的数据结构设计成一哈稀表结构,哈稀表的查找,插入等操作是快速的。所设计的哈稀结构符号表结构如下:对标识符的处理Y查找,返回对象指针找到否?N出现次数+1生成一个新的对象然后插入将数据赋值给yylva.decl程序hashtable.cpp/GHashtable.cpp:addyourcodebelow:G/#include#includestdlib.h#includedeclarat

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号