东北大学编译原理实验报告二

上传人:人*** 文档编号:507890552 上传时间:2023-04-06 格式:DOC 页数:9 大小:122.50KB
返回 下载 相关 举报
东北大学编译原理实验报告二_第1页
第1页 / 共9页
东北大学编译原理实验报告二_第2页
第2页 / 共9页
东北大学编译原理实验报告二_第3页
第3页 / 共9页
东北大学编译原理实验报告二_第4页
第4页 / 共9页
东北大学编译原理实验报告二_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《东北大学编译原理实验报告二》由会员分享,可在线阅读,更多相关《东北大学编译原理实验报告二(9页珍藏版)》请在金锄头文库上搜索。

1、编译原理程序设计实验报告表达式语法分析器的设计与实现班级: 姓名: 学号:实验目标: 用两种不同的方法设计一个表达式的语法分析器 实验内容: LL(1) 分析法LL( 1)文法是一种自上而下的语法分析方法,它是从文法的识别符号出发,生 成句子的最左推导, 从左到右扫描源程序, 每次向前查看 1 个字符,便能确定当 前应该选择的产生式。LL( 1)分析需要用到一个分析表 M和一个符号栈S,分析表M是一个矩 阵,它的元素可以存放一个非终结符的产生式, 表明当符号栈S的栈顶元素非终 结符遇到当前输入字符时,所应选择的产生式; M 的元素还可以是存放一个出 错标志,说明符号栈S的栈顶元素非终结符不应该

2、遇到当前输入字符 (终结符)。重复调用 L(L 1)分析方法对每一个输入字符进行分析, 直到输入栈为空为止。递归下降子程序递归下降分析法,在判断一个表达式时首先进入 E然后调用T在调用F,判 断是否为“(”或字符或常数,如果不是报错,是“(”的话再进入 E,是字符 或常数的话跳出递归。然后进入 T中下一步,判断是否为“ *”,是的话进入T 子递归,不是的话跳出,进入 E的下一步判断是否为“ +”,是的话进入E的子 递归,不是的话跳出回到主程序。当 ch标识符为#时结束。主程宇子甩宇E:开始入口 I子程宇F:子理呼T:入口源程序代码:(加入注释)LL(1)分析算法:#include #inclu

3、de using namespace std;#define STACKSIZE 50#define STACKINCREMENT 10#define OK 1#define error 0#define overflow -1 typedef char SElemType;typedef int Status; typedef struct SElemType *base;SElemType *top;Int stacksize;SqStack;Status InitStack(SqStack &S)= (SElemType * )malloc(STACKSIZE * sizeof(SEle

4、mType); if (!exit(overflow);=STACKSIZE;return OK;Status Push(SqStack &S, SElemType e)if - = (SElemType * )realloc, + STACKINCREMENT) * sizeof(SElemType); if (!exit(overflow);= + ;+= STACKINCREMENT;+;* = e; return OK;Status Pop(SqStack &S, SElemType &e)if =return error; return OK;e = *;Status Grammer

5、Analysis(SqStack &S, char *ch, char c)SElemType e;Push(S, #);Push(S, E);while (!(* = #) & (c = #)Pop(S, e);if (e = E) & (c = 0) & (c =a&c= 0) & (c =a&c=0&c=a&c= 0) & (c =a&c=z)ch+;else if (e = F) & (c = () Push(S, );Push(S, E);ch+;c = *ch;else if (e = ) & (c = ) ch+;c = *ch;else return error;return

6、OK;int main()char str50;char c;system(color 0B);SqStack S;InitStack(S);printf(|n);|n);printf(| 请输入表达式,以 #键结束 :printf(|n);scanf(%s, str);c = *str;if (GrammerAnalysis(S,str,c) printf( 语法分析通过 n); printf( 表达式正确 n);elseprintf( 语法分析未通过 n); printf( 表达式错误 n); main();return 0;递归下降#include using namespace std

7、;int a=1; char ch;int i=0;char str80; void T(void); void F(void); void E(void);void Error(void);void Error()/ 出错函数cout 语法错误 =0&ch=a&ch=z)i+;ch=stri;elseError();a=0;void E(void) / 子程序 E T();if(ch=+)i+;ch=stri;int main() / 主函数 system(color 0B);cout|endl;cout| 输入表达式以 #号结束|endl;cout|str;ch=str0;while(ch!=#)E();if(!a)break;if(ch=#) & ( a != 0)/ 遇#且 a 不等于零时语法正确cout 语法正确 endl;return 0;程序运行结果: (截屏)LL(1分析法:递归下降:思考问题回答:语法分析的任务是什么语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,语法分析程序判断源程序在结构上是否正确。 通过接受词法分析程序识别出来的单词符号串,判断它们是否由某种语言的文法产生,即判断被识别符号串是否为某语法成分,同时进行语法检查,为后面的语义分析和代码生成作准备。

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

当前位置:首页 > 资格认证/考试 > 自考

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