语法分析器构造互联网

上传人:s9****2 文档编号:473400593 上传时间:2023-05-24 格式:DOC 页数:14 大小:238.50KB
返回 下载 相关 举报
语法分析器构造互联网_第1页
第1页 / 共14页
语法分析器构造互联网_第2页
第2页 / 共14页
语法分析器构造互联网_第3页
第3页 / 共14页
语法分析器构造互联网_第4页
第4页 / 共14页
语法分析器构造互联网_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《语法分析器构造互联网》由会员分享,可在线阅读,更多相关《语法分析器构造互联网(14页珍藏版)》请在金锄头文库上搜索。

1、编译原理实验报告实验题目:语法分析器构造指导教师: 姓名:班级:学号:实验成绩:实验题目语法分析器构造实验目的和要求借助于词法分析程序提供的分析结果,编写一个算符优先语法分析程序,程序能进行语法结构分析和错误检查并产生相应的归约信息。同时给出出错信息和错误类型,从而加深对语法分析的理解。设计思想与框架main函数:算术表达式函数:算符优先算法:核心算法主要数据结构说明:符号栈:stackN栈顶指针:top记录归约步骤号:NoN输入字符串:stringsN算术表达式:old_stringsN记录下一个输入符号:a可归约字符串:*word6手动生成的算符优先表:x99查找算符表达式:express

2、ion(char *str)入栈:push(char ch)出栈:pop(char ch)根据算符优先分析表设置读入优先次序:rank(char ch1,char ch2)判断是否为终结符:isVT(char ch)算符优先分析函数:analysis()算符优先分析算法算法采用一个符号栈的数据结构,既用它存放终结符,也用它存放非终结符。设K为符号栈使用深度,其参考算法如下: K:=1; StackK:= #; Repeat 把下一个输入符号读进a中; If StackKVT then j:=K else j:=K-1; while Stackj优先级比a高 do Begin Repeat Q:

3、=Stackj; If Stackj-1VT then j:=j-1 else j:=j-2 Until Stackj比Q优先级低; 把Stackj+1StackK归约为某个N;记录归约产生式序号; K:=j+1; StackK:=N end of while If Stackj比a优先级低 OR Stackj与a优先级相同 then Begin K:=K+1; StackK:=a end else ERROR 查表打印出错信息 Until a=#源程序及注释#include#include#include#include#define N 100char stackN,stringsN,ol

4、d_stringsN;int top=-1;int k=0;/k输入字符串数字strings即将被读的字符位置标识int NoN,id=1,sr=0,step=1,n=0;char a;/用于传递即将读入的字符char x99= ,+,-,*,/,(,),i,#, +, -, *, /, (,=, , , i, , , #, ,a&chA&ch=0&ch|stri-1=)return 1;else if(xij=);else if(m=0)printf(%-8c,=);elseprintf(%-8c,);printf(%-10c,a);printf(%-10s,&stringsk);if(t)

5、printf(%-8s,归约);Non+=step-1;elseprintf(%-8s,移进);int isVT(char ch)if(ch=N) return 0; else return 1;void analysis()int i,j=-1,m;char ch20,str;push(#);print(0,-1);a=strings0;while(a!=0)if(stacktop=N&k=(strlen(strings)a=stringsk-1;elsea=stringsk;k+;if(isVT(stacktop)j=top;elsej=top-1;while(isVT(a)&rank(s

6、tackj,a)=1)/判断是否满足规约的条件memset(ch,0,sizeof(ch);int h;doh=j;/h记录要规约的位置if(isVT(stackj-1)j=j-1;elsej=j-2;while(rank(stackj,stackh)!=-1);i=-1;while(top-j)!=0)ch+i=pop();chi+1=0;for (m=0;m=5;m+)/把字符数组ch规约成Nif(strcmp(wordm,ch)=0)str=N;push(str);/将规约后的N压入stack栈中/k+;print(1,1);if(rank(stackj,a)=-1)push(a);/k+;print(0,-1);else if(rank(stackj,a)=0)push(a);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

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