云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 编译原理实验报告5-语法分析程序的设计(2)

编译原理实验报告5-语法分析程序的设计(2)

  • 62 次阅读
  • 3 次下载
  • 2025/6/1 5:55:26

}

printf(\

else { }

while (1) {

//只读一行,行末标志为“;”

int flag = scan(fp, E,num); if (flag == 0) break;

break;

num++;

}

printf(\输出:\ syntax(E,num);

}

fclose(fp);

fp = NULL;

}

3、 程序运行流程; //关闭文件

//避免指向非法内存

输入表达式到文本

4、 程序的测试结果和问题;

实验报告源数据:

返回 是 输出错误 输出结果 调用syntax()判断语法是否正确 程序开始 是 是否是文件尾 否 读取一行文本 否 退出程序 其它数据:

问题:

实验时是根据实验报告提供的算法编程的,但是原算法使用了类似Pascal的语言,而我用的是C,算法实现时具体的语法不同,例如Pascal的repeat…until与C语言的do…while并一样,实验时不注意会使程序出错,二者的循环条件是相反的。

编程时,误将终结符数组的左右括号输入成了中文的括号,导致在判断是否为终结符时,英文的左右括号无法与中文的括号匹配,程序出现了错误,虽然调试时

很容易就发现了,但这样的细节问题不应该费时间要调试才解决,这提醒我编程时更应该认真仔细,效率才能得到保证。

另外,语法错误时,这一行表达式的分析就可以直接终止但此时程序是在两层循环里面,只有跳出这两层循环才会终止,而break则只能跳出一层,若在最后一层使用标志,再跳出一层,这就导致之后的每一行都会多做一次判断,而我又不想使用goto,所以最后我决定使用子函数,将语法分析的主要程序段放在子函数中,有语法错误,直接return就可以了。 5、 实验总结。

本次实验有之前的词法分析程序和已经提供的算法作基础,编写起来并不难,就是要注意算符优先文法本身的优缺点,它忽略右部只有一个非终结符的产生式,而且规约的时候主要还是匹配终结符,由于这个原因,规约很快,但有些语法错误的表达式会误认为句子,所以在在原本算法的第十一步,规约的具体步骤要按具体的文法来完成,其中要包括没有匹配时对应的错误处理。实验的最主要部分的算法很容易实现,主要是如何正确的完成规约,并将正确的句子的结果计算出来,此处是借助于结构体,在每个规约步骤中,加上对应的计算规则,即可完成。通过这个,再次让我明白,编程时,设计好算法和数据结构事半功倍。

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

} printf(\else { } while (1) { //只读一行,行末标志为“;” int flag = scan(fp, E,num); if (flag == 0) break; break; num++; } printf(\输出:\ syntax(E,num); } fclose(fp); fp = NULL; } 3、 程序运行流程; //关闭文件

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com