- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
语法分析器报告
编译原理实验报告
实验题目:词法分析器构造
指导教师:杨建,赵会群
姓名:
班级:
学号:
实验成绩:
实验题目 语法分析器构造借助于词法分析程序提供的分析结果,编写一个算符优先语法分析程序,程序能进行语法结构分析和错误检查并产生相应的归约信息。同时给出出错信息和错误类型,从而加深对语法分析的理解。1.本实验的优先表可以手工先设计好
算符优先关系表
----------------------------------
+ - * / ( ) i #
+
-
*
/
( = ?
) ? ?
i ? ?
# ? =
----------------------------------
算术表达式-项|算术表达式+项|算术表达式-项
项-因子|项*因子|项/因子
因子-变量|常数|(算术表达式)2.本实验要求中提出的“产出相应的归约信息”意指在语法分析的过程中,一旦产生归约,在程序上产生并最终输出归约产生式序号。
3.出错类型的产生可预先对应优先表中出错栏列表说明其出错类型,并分别编序,当分析中产生错误时以字符串输出相应表中错误信息。算法采用一个符号栈的数据结构,既用它存放终结符,也用它存放非终结符。设K为符号栈使用深度,其参考算法如下:K:=1 S[K]:=#
Repeat
把下一人输入符读入a中If S[K]∈VT then j:=K else j:=K-1
While S[j]a do
Begin
Repeat
Q:=S[j]
If S[j-1]∈VT then j:=j-1 else j:=j-2
Until S[j]Q
把S[j+1]……S[K]归约为某个N
记录归约产生式序号
K=j+1
S[K]:=N
End of while
If S[j]a OR S[j]=a then
Begin
K:=K+1; S[K]:=a
End
Else ERROR {查表打印出错信息}
Until a=#
输出归约产生式序列号;#include iostream
#include cstdio
#include iomanip
using namespace std;
#define N 100
#define NULL 0
FILE *fp;//预处理文件指针
//定义符号栈的大小与输入字符串的大小以及算术表达式字符串的大小
char stack[N],strings[N],oldstrings[N];
char a;
int top=-1,k=0,step=1,n=0,No[N],id=1;
//二维数组定义字符之间的优先关系(1表示,-1表示,0表示=,-2表示错误)
int M[N][N]={{1,1,-1,-1,-1,1,-1,1},{1,1,-1,-1,-1,1,-1,1},{1,1,1,1,-1,1,-1,1},
{1,1,1,1,-1,1,-1,1},{-1,-1,-1,-1,-1,0,-1,-2},{1,1,1,1,-2,1,-2,1},
{1,1,1,1,-2,1,-2,1},{-1,-1,-1,-1,-1,-2,-1,0}};
char *word[6]={N+N,N-N,N*N,N/N,)N(,i};//可归约字符串
int print(int t,int m)
{
cout\n step++setw(10);
coutstacksetw(10);
if(m==1)
coutsetw(8);
else if(m==0)
cout=setw(8);
else
coutsetw(8);
coutasetw(10);
coutstrings[k]setw(10);
if(t)
{
cout归约setw(8);
No[n++]=step-1;
}
else
cout移进setw(8);
return 0;
}
void push(char ch)
{
stack[++top]=ch;
}
char pop()
{
char a;
a=stack[top--];
stack[top+1]=
您可能关注的文档
最近下载
- 输液港常见并发症及处理.pptx VIP
- 海天蒙德Hi驱动器说明书.pdf
- 运动场土方工程方案(3篇).docx VIP
- 基于单片机的土壤湿度检测及控制系统设计.pdf VIP
- 2024年四川省宜宾市【辅警协警】笔试真题(附答案).docx
- GB_T 311.4-2010绝缘配合 第4部分:电网绝缘配合及其模拟的计算导则.docx VIP
- 大学生职业生涯规划与就业指导(高校学生学习职业生涯规划与就业指导课程)全套教学课件.pptx
- 220kv变电站新建工程施工组织设计.docx VIP
- GB_T 311.2-2013绝缘配合 第2部分:使用导则.docx VIP
- 6.3三角形的中位线 课件(共22张PPT).pptx VIP
文档评论(0)