语法分析实验语法分析(LR).doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
语法分析实验语法分析(LR)

实 验 报 告 课程名称 编译原理 实验名称 语法分析(LR) 班 级 计科1203 学 号 201207010321 姓 名 马万里 指导教师 黄 全 舟 实验日期 2015.5.21 一、实验目的 构造LR(1)分析程序,利用它进行语法分析,判断给出的符号串是否为该文法识别的句子,了解LR(K)分析方法是严格的从左向右扫描,和自底向上的语法分析方法。? 二、实验原理 (1)总控程序,也可以称为驱动程序。对所有的LR分析器总控程序都是相同的。? (2)分析表或分析函数,不同的文法分析表将不同,同一个文法采用的LR分析器不同时,分析表将不同,分析表又可以分为动作(ACTION)和状态转(GOTO)表两个部分,它们都可用二维数组示。? (3)分析栈,包括文法符号栈和相应的状态栈,它们均是先进后栈。分析器的 动 作就是由栈顶状态和当前输入符号所决定。 LR分析器由三个部分组成: INCLUDEPICTURE \d /docconvert2785-nj//wk/f3bcd63db6d7686314686f669fbbf32b/0.png?sign=MBOT:y1jXjmMD4FchJHFHIGN4z:HzQkbGyNFp8pplDA1dlp8VPpjq0=time=1432469065range=0-8128response-cache-control=max-age=3888000response-expires=Wed, 08 Jul 2015 19:04:25 +0800 \* MERGEFORMATINET  其中:SP为栈指针,S[i]为状态栈,X[i]为文法符号栈。状态转换表用GOTO[i,X]=j表示,规定当栈顶状态为i,遇到当前文法符号为X时应转向状态j,X为终结符或非终结符。?ACTION[i,a]规定了栈顶状态为i时遇到输入符号a应执行。 主要仪器设备 Pc机一台(装有vs2012) 四、主要代码及其说明 #include stdio.h #include string.h #include vector #include iostream using namespace std; #define N 10 char *Action[][4]= { //此处三维也可以 {S3, S4, ERROR,ERROR}, {ERROR,ERROR,ERROR,acc}, {ERROR,ERROR,S5, R2}, {ERROR,ERROR,R3, R3}, {ERROR,ERROR,R4, R4}, {S3, S4, ERROR,ERROR}, {ERROR,ERROR,ERROR,R1}}; Int GoTo[][2]={{1,2},{0,0},{0,0},{0,0},{0,0},{6,2},{0,0}}; char *GL[]={L-E,L,L-E,E-a,E-b }; int _Push(vector int State,vector char InChar,int a,char b) { State.push_back(a); InChar.push_back(b); return a; } void _Pop(vector int State,vector char InChar,int cout) { while(cout) { State.pop_back(); InChar.pop_back(); cout--; } } void PrinStack(vector int State,vector char InChar)//状态栈 和栈中符号输出 { vector int::iterator iter_s =State.begin(); vector char::iterator iter_i=InChar.begin(); for(;iter_s !=State.end();iter_s++) { cout*iter_s; } printf(\t); for(;iter_i !=InChar.end();iter_i++) { cout*iter_i; } printf(\t\t); } void printInCh

您可能关注的文档

文档评论(0)

kaiss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档