编译原理实验二:赋值语句的语法分析程序设计

该博客介绍了编译原理实验中使用递归下降法设计赋值语句的语法分析程序。实验内容包括实现对词法分析后的单词序列进行语法检查,选择了PL/0相关赋值语句的语法,并强调了递归下降法的简单性和工作原理。博主分享了实验分析过程及主要的代码实现。
摘要由CSDN通过智能技术生成

编译原理实验二:赋值语句的语法分析程序设计

1.1实验内容

目的:

  • 在前面实验的基础上,通过设计、编制、调试一个典型的赋值语句的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查,进一步掌握常用的语法分析方法。

要求:

  • 设计出给定源语言中包含有算术表达式、关系表达式和逻辑表达式的赋值语句的文法,文法满足采用的语法分析方法的要求。
  • 选择最有代表性的语法分析方法,如算符优先法(或简单优先法)、递归下降分析法、LL分析法和LR分析法之一进行语法分析。
  • 选择对各种常见程序语言都通用的语法结构,以文本文件形式输入源程序,把其中赋值语句作为分析对象进行语法检查,输出分析结果。

1.2实验分析

在本次的实验中呢,我采用的方法是递归下降法*(别问,问就是相对简单)*其实也还好,看各自感觉吧,然后我使用的语法是PL/0相关赋值语句的语法,如下:

〈赋值语句〉∷=〈标志符〉:=〈表达式〉
〈表达式〉∷= [+|-]〈项〉{〈加法运算符〉〈项〉}
〈项〉∷= 〈因子〉{〈乘法运算符〉〈因子〉}
〈因子〉∷= 〈标志符〉|〈无符号整数〉|‘(’〈表达式〉‘)’

特别巧的是,由于本人的学术不精,刚开始并不知道递归下降法还需要求出相应的字符的select集,而且我使用的语法刚好是不需要往后看一个字符就可以完成的,所以,在验收的时候我才被老师说明白需要求出每个产生式的select,如果有需要参考我的代码的童鞋们可以自己加一下相关的部分哦,不是特别难。

递归下降法在我看来相对于其他几种方法都比较简单,是对每一个产生式进行分析,不同产生式对应的函数之间进行调用等,便可完成相应的功能。

1.3实验代码

赋值语句相应产生式的分析:

void assignment() {
   
	if (s == "ident") {
   
		flag = move();
		if (flag == 0) {
   
			cout << "语法错误 标识符后面缺项" << endl;
			success = 0;
			return;
		}
		if (s == "becomes") {
   
			flag = move();
			if (flag == 0) {
   
				cout << "语法错误 赋值符后面缺项" << endl;
				success = 0;
  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值