版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、算符优先语法分析设计原理与实现技术XXX 1028XXX 计科1XXX班功能描述能够有效识别以下算符优先文法E E+T | E-TT T*F | T/F | FF (E) | i所描述算术表达式主要数据结构描述数据结构功能描述string 存储该算符优先文法,对栈顶元素进行规约时要用到map符号表中的元素映射成整数map将用整数表示的符号映射到响应的行或列map将整数映射成相应的字母表中的符号int 分析栈程序结构描述n 设计方法1. 由文法构造算符优先矩阵+-*/()i#+-*/(=i#) 再找最左素短语的头部()以分析表达式i+i*i为例,详细过程如下:n 函数定义函数原型功能描述void
2、 init()各种初始化操作,主要是建立符号与整数、整数与行列号、整数与符号之间的映射,也包括各全局变量的初始化void isVt(int )判断某整数所代表的符号是否是终结符号或#void comp(int a, int b)比较两整数所代表的字符的优先关系void advance()从输入文件中读入一个词bool parser()算符优先分析函数,根据算符优先矩阵进行语法分析int main(int argc, char *argv)主函数,参数argv1代表输入文件n 函数调用关系maininitisVtadvanceparsercompn 程序执行图程序测试测试用例一:(a+b*c)+
3、d+e+a*c/b首先调用实验一的词法分析程序,得到如下分析结果:(19, ()(12, a)(14, +)(12, b)(16, *)(12, c)(20, )(14, +)(12, d)(14, +)(12, e)(14, +)(12, a)(16, *)(12, c)(17, /)(12, b)在以此分析结果作为本程序实验结果的输入,得到如下分析结果:该结果显示了详细的分析过程,且表明该表达式是一个符合该文法的表达式测试用例二:(a+b*c)+d*-a*c+(a+b同样调用实验一的词法分析程序,得到如下结果:(19, ()(12, a)(14, +)(12, b)(16, *)(12,
4、c)(20, )(14, +)(12, d)(16, *)(15, -)(12, a)(16, *)(12, c)(14, +)(19, ()(12, a)(14, +)(12, b)以此分析结果作为本实验程序的输入,得到如下语法分析结果:实验结果表明,在分析过程中出现了错误,分析过程未完成,该样例是一个非法的表达式学习总结 按算符优先关系所确定的应被规约的子串恰好是当前举行的最左素短语 尽管算符优先分析也属于自底向上语法分析的范畴,但却不是严格的从左至右的规范分析,每步所得的句型自然也不是一个规范句型 采用上述策略进行算符优先分析时,尽管我们也指出了每一最左素短语应规约到的非终结符号,然而每
5、次在查找最左素短语时,起主导作用的是终结符号间的优先关系,两终结符号之间究竟是哪个非终结符号无关宏旨/ operator_prior.cpp : Defines the entry point for the console application./#include stdafx.h#include #include #include #include #include #define ID 12#define ADD 14#define SUB 15#define MUL 16#define DIV 17#define LP 19#define RP 20#define EOI 31#de
6、fine SHARP 32#define EQ 0#define BT 1#define LT 2#define UD 3#define N_Base 1000using namespace std;FILE *fp;int lookahead, yylineno;bool success;map intToint;map charToint;map intTochar;string grammer8 = E+T, E-T, T, T*F, T/F, F, (E), i;int prior_matrix99 = BT, BT, LT, LT, LT, BT, LT, BT, BT, BT, L
7、T, LT, LT, BT, LT, BT, BT, BT, BT, BT, LT, BT, LT, BT, BT, BT, BT, BT, LT, BT, LT, BT, LT, LT, LT, LT, LT, EQ, LT, UD, BT, BT, BT, BT, UD, BT, UD, BT, BT, BT, BT, BT, UD, BT, UD, BT, LT, LT, LT, LT, LT, UD, LT, EQ;void init() success = true; yylineno = 0; intTointADD = 0; intTointSUB = 1; intTointMU
8、L = 2; intTointDIV = 3; intTointLP = 4; intTointRP = 5; intTointID = 6; intTointSHARP = 7; charToint+ = ADD; charToint- = SUB; charToint* = MUL; charToint/ = DIV; charToint( = LP; charToint) = RP; charTointi = ID; intTocharADD = +; intTocharSUB = -; intTocharMUL = *; intTocharDIV = /; intTocharLP =
9、(; intTocharRP = ); intTocharID = i; intTocharSHARP = #; intTocharN_Base = N;bool isVt(int a) if (a = N_Base) return false; else return true;int comp(int a, int b) int x = intTointa; int y = intTointb; return prior_matrixxy;void advance() if (fscanf(fp, (%d, &lookahead) = EOF) lookahead = SHARP; els
10、e char ch; do ch = fgetc(fp); if (ch = n | ch = EOF) break; while (true); yylineno+;void parser() int stack100, top = 0; int i, j, k, ii, jj; stacktop+ = SHARP; advance(); do for (i = 0; i = 0; i-) if (isVt(stacki) break; int res = comp(stacki, lookahead); if (res = LT | res = EQ) stacktop+ = lookah
11、ead; advance(); else if (res = BT) int temp = stacki; for (j = i - 1; j = 0; j-) if (isVt(stackj) if (comp(stackj, temp) = LT) break; else temp = stackj; for (k = 0; k = A & grammerk.at(jj) = Z) if (isVt(stackii) break; else if (charTointgrammerk.at(jj) != stackii) break; ii+; jj+; while (ii top & jj = top) break; if (k = 8) success = false; return ; top = j + 1; stacktop+ = N_Base; else success = false; return ; if (stack0 = SHARP & stack1 = N_Base & stack2 = SHARP) printf(#N#n); break; while (true); success = true;int main(int argc, char
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 起搏器装置的维护与保养
- VTE护理中的信息化管理
- 抗菌药物的试题及答案
- 经济法学试题及答案
- 2026春招:春秋航空试题及答案
- 员工心里定位培训-课件
- 团队激励与团队文化建设
- 《奥斯特的发现》物理授课课件
- 2026年国企财务考核高频题型练习题及参考答案
- 2026年期货从业资格基础知识考题含答案
- 2021-2022学年天津市滨海新区九年级上学期物理期末试题及答案
- 江苏省苏州市、南京市九校2025-2026学年高三上学期一轮复习学情联合调研数学试题(解析版)
- 2026年中国医学科学院医学实验动物研究所第三批公开招聘工作人员备考题库及答案详解一套
- 2025年幼儿园教师业务考试试题及答案
- 国家开放大学《Python语言基础》形考任务4答案
- (自2026年1月1日起施行)《增值税法实施条例》重点解读
- 2026春小学科学教科版(2024)三年级下册《4.幼蚕在生长》教学设计
- 管道安装协议2025年
- 2026年内蒙古商贸职业学院单招综合素质考试题库附答案详解
- 2026年青岛航空科技职业学院单招职业适应性考试题库含答案详解
- 事业编财会面试题及答案
评论
0/150
提交评论