- 1、本文档共22页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理第二次上机实验报告姓名:李x班级:软工140x班学号:U2014172xx实验二 设计实现简单语言的语法分析器1、实验目的通过该实验,熟练应用编译原理关于语法分析的基本理论和方法;学会用C/C++高级程序设计语言设计一个语法分析器;加深对编译原理理论的分析理解,提高实际操作和解决具体问题的能力。2、实验条件计算机上安装C/C++编译处理软件。3、实验内容及要求对下述单词表与语法定义的语言设计编制一个语法分析器。单词符号及种别表、语法及语法分析器功能、基本要求如下:(1)单词符号及种别表单词符号种别编码单词值main1 int 2 float3 double4 char5 if 6 else 7 do8 while9 l(l|d)*10内部字符串 ( +|-|ε ) dd*(.dd* | ε)( e ( +|-|ε ) dd*|ε) 20二进制数值表示=21 +22- 23 * 24 / 25 (26 )27 {28 }29 ,30 ;31 32 =33 34 =35 ==36 !=37 #0 (2)语法结构定义表达式 ::= 项{+项|-项}项 ::= 因子{*因子|/因子}因子 ::=ID|num|(表达式)num::=( +|-|ε ) 数字数字*(.数字数字* | ε)( e ( +|-|ε ) 数字数字*|ε)ID::=字母(字母|数字)*字母::=a|b|c…|z|A|B|C…|Z数字::=0|1|2…|9(3)语法分析器功能及基本要求 处理用户提交的符合上述文法的源代码序列,进行语法分析,并给出语法是否正确的结论。(1)总体设计思想利用自上而下的分析方法;本实验所采用的是LL(1)分析法即预测分析法;每次通过词法分析模块读入一个完整的单词,在语法分析中判断正确性,最终将结果输出。(2)详细算法设计语法分析表达式 ::= 项{+项|-项}项 ::= 因子{*因子|/因子}因子 ::=ID|num|(表达式)num::=( +|-|ε ) 数字数字*(.数字数字* | ε)( e ( +|-|ε ) 数字数字*|ε)ID::=字母(字母|数字)*字母::=a|b|c…|z|A|B|C…|Z数字::=0|1|2…|9用字母替代后写成如下:E→ T{+T | -T}T→ F{*F | /F}F→i| n | (E)将该扩充文法还原EE+T | E-T | TTT*F | T/F | FF (E) | i | n消除非终结符E、T的直接左递归后,文法变为E TE’E’+TE’| -TE’ |εTFT’T’*FT’| /FT’|εF(E) | i | n此文法是LL(1)文法求出该文法的预测分析表in+-*/()$EETE’ETE’ETE’E’(e)E’+TE’E’TE’E’εE’εTTFT’TFT’TF’T’(t)T’εT’εT’*FT’T’/FT’T’εT’εFFiFnF(E)根据预测分析表、分析栈和一个总控程序来判断一个语句是否正确;(3) 流程框图(4) 函数相关说明charinput[300];//存放输入的字符串chartoken[20];//存放符合C语言词法规则的单词charch;//单个字符charprevious;//ch的前一个字符charlatter;//ch的后一个字符charch1, ch2;//当处理注释的时候使用inttypenum;//表示单词的种别码intp, m, n, cx;doubledecimal;//记录小数doublesum;//存放数字intindex;//存放指数intisNum;//是否是数字intisDecimal;//记录是否为小数intisExp;//记录是否为指数intisNegative;//是否带负号(对于指数)intisNegative1;//是否为负数charX,a;charstack[200];voidscanner();char *rwtab[11] = { main, int, float, double, char, if, else, while, do, end };//记录预测分析表,0表示没有产生式,其他数字表示产生式的序号int List[5][9] = {{ 1, 2, 0, 0, 0, 0, 3, 0, 0 },{ 0, 0, 4, 5, 0, 0, 0, 6, 7 },{ 8, 9, 0, 0, 0, 0, 10, 0, 0 },{ 0, 0, 11, 12, 13, 14, 0, 15, 16 },{ 17, 18, 0, 0, 0, 0, 19, 0, 0 }};char returnResult()函数返回n、i、e、+、-、*、/、(、);void scanner() 扫描函数判断种别码bool isVT(char
文档评论(0)