版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理程序设计实验报告表达式语法分析器的设计与实现班级:姓名:学号:实验目标:用两种不同的方法设计一个表达式的语法分析器实验内容:LL(1) 分析法LL(1)文法是一种自上而下的语法分析方法,它是从文法的识别符号出发,生成句子的最左推导,从左到右扫描源程序,每次向前查看1个字符,便能确定当前应该选择的产生式。 LL(1)分析需要用到一个分析表M和一个符号栈S,分析表M是一个矩阵,它的元素可以存放一个非终结符的产生式,表明当符号栈S的栈顶元素非终结符遇到当前输入字符时,所应选择的产生式;M的元素还可以是存放一个出错标志,说明符号栈S的栈顶元素非终结符不应该遇到当前输入字符(终结符)。 重复调用
2、LL(1)分析方法对每一个输入字符进行分析,直到输入栈为空为止。递归下降子程序 递归下降分析法,在判断一个表达式时首先进入E然后调用T在调用F,判断是否为“(”或字符或常数,如果不是报错,是“(”的话再进入E,是字符或常数的话跳出递归。然后进入T中下一步,判断是否为“*”,是的话进入T子递归,不是的话跳出,进入E的下一步判断是否为“+”,是的话进入E的子递归,不是的话跳出回到主程序。当ch标识符为#时结束。 源程序代码:(加入注释)LL(1) 分析算法:#include #include using namespace std;#define STACKSIZE 50#define STACK
3、INCREMENT 10#define OK 1#define error 0 #define overflow -1typedef char SElemType;typedef int Status;typedef struct SElemType *base;SElemType *top;Int stacksize;SqStack;Status InitStack(SqStack &S)S.base = (SElemType * )malloc(STACKSIZE * sizeof(SElemType);if (!S.base)exit(overflow);S.top=S.base;S.s
4、tacksize=STACKSIZE;return OK;Status Push(SqStack &S, SElemType e)if (S.top - S.base = S.stacksize) S.base = (SElemType * )realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType);if (!S.base)exit(overflow);S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;(S.top)+;*(S.top) = e;ret
5、urn OK;Status Pop(SqStack &S, SElemType &e)if (S.top = S.base) return error;e = *(S.top);S.top-;return OK;Status GrammerAnalysis(SqStack &S, char *ch, char c) SElemType e;Push(S, #); Push(S, E); while (!(*(S.top) = #) & (c = #)Pop(S, e);if (e = E) & (c = 0) & (c =a&c= 0) & (c =a&c=0&c=a&c= 0) & (c =
6、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 OK;int main()char str50; char c;system(color 0B);SqStack S;InitStack(S);printf(|-|n);printf(| 请输入表达式,以#键结束: |n);printf(|-|n);scanf(%s, str);c = *str; if (GrammerAnalysis(
7、S,str,c)printf(语法分析通过n);printf(表达式正确 n);elseprintf(语法分析未通过n);printf(表达式错误 n);main();return 0;递归下降#includeusing namespace std;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;else Error();a=0;void E(void) /子程序E T();if(ch=+) i+; ch=stri; E(); /递归子程序Eint 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)分析法:递归下降:思考问题回答: 语法分析的任务是什么? 语法分析的任务是在词
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成都银行2027年招聘总行数据管理部大数据开发专家等岗位考试参考题库及答案解析
- 2026年防城港市防城区事业单位人员招聘笔试试题与答案详解
- 2026北京大学材料科学与工程学院招聘1名劳动合同制工作人员笔试备考题库及答案解析
- 2026年云南省曲靖市事业单位人员招聘笔试备考题库与答案详解
- 2026年抚顺市东洲区公务员人员招聘笔试备考试题与答案详解
- 2026年印刷专用设备制造行业趋势研究报告及未来五至十年渠道变革与价值重塑
- 2026浙江大学医学院基础医学实验教学中心招聘科研助理1人笔试备考试题及答案解析
- 2026年家电、IT连锁行业洞察报告及未来五至十年发展趋势报告
- 2026年渝中区万盛区公务员人员招聘考试模拟试题与答案详解
- 2026年无菌包装行业洞察报告及未来五至十年发展趋势报告
- 检察院招录书记员考试《法律基础知识》及答案
- 2025年军队文职《专业科目》教育学类(体育学)统一考试试卷
- 2024年中国船级社北海办事处招聘笔试真题
- 2025年共青团团课考试题库及答案
- DB32T 4355-2022 建筑施工附着式升降设施安全技术规程(修)
- 废气处理行业营销策略方案
- 法务岗位招聘笔试题与参考答案(某大型国企)
- 七年级地理下学期人教版 8.3撒哈拉以南非洲第二课时 教学设计
- T-CECS120-2021套接紧定式钢导管施工及验收规程
- 授权他人使用车辆委托书
- 幼儿园语言领域活动设计
评论
0/150
提交评论