2021编译技术实验文法定义及相关说明1
需积分: 0 131 浏览量
更新于2022-08-04
收藏 538KB PDF 举报
《2021编译技术实验文法定义及相关说明》
本文主要介绍了一种名为SysY的编程语言,它是C语言的一个子集,用于教学编译技术的实验。SysY语言支持基本的变量声明、常量声明、函数定义以及简单的输入输出功能。以下是关于SysY语言的关键知识点的详细说明:
1. **程序结构**:
- SysY程序的源代码保存在扩展名为`.sy`的文件中,必须包含一个名为`main`的主函数。
- 可以包含全局变量和常量声明,以及其他函数定义。
- `int`是唯一支持的基本数据类型,表示32位有符号整数。
- 支持元素为`int`类型、按行优先存储的多维数组。
2. **常量声明**:
- 使用`const`关键字声明常量,常量可以是基本类型或数组类型。
- 常量定义时需要初始化。
3. **函数**:
- 函数可以带有或不带有参数,参数可以是`int`或数组类型。
- 函数可以返回`int`类型或`void`类型。
- 参数传递:`int`类型按值传递,数组类型实际传递的是首地址,且只指定第一维长度。
4. **变量声明**:
- 可以一次声明多个变量或常量,并可以初始化。
- 变量分为全局变量和局部变量。
5. **语句**:
- 包括赋值语句、表达式语句、语句块、条件语句(`if`)、循环语句(`while`)、控制语句(`break`、`continue`)和返回语句(`return`)。
- 语句块可以包含变量声明和语句。
6. **表达式**:
- 支持基本的算术、关系和逻辑运算。
- 算术运算符的优先级和结合性遵循C语言规则。
- 非0表示真,0表示假,关系和逻辑运算结果用1和0表示。
7. **输入输出**:
- SysY语言使用`getint`获取用户输入的整数,`printf`进行输出,格式化字符串只支持`\n`作为转义字符。
- 在C语言中测试,只需在函数声明中加入`getint`。
8. **文法覆盖要求**:
- 实验的测试程序应覆盖文法的所有规则,满足语义约束,确保程序正确性。
- 文法使用扩展的Backus-Naur形式(EBNF)表示。
9. **文法规则**:
- `CompUnit`是起始符号,包括可选的`Decl`和`FuncDef`。
- `Decl`可以是`ConstDecl`或`VarDecl`,涵盖常量和变量声明。
- `BType`只包含`int`。
- `ConstDef`定义常量,包括普通变量、一维数组和二维数组。
- `ConstInitVal`用于初始化常量,可以是常量表达式或数组初始化。
实验要求学生不仅要理解这些基本概念,还需要编写能够覆盖所有语法规则的测试程序,以验证编译器的正确性。通过这个实验,学生将深入理解编译器的工作原理和语言的文法结构。
高工-老罗
- 粉丝: 25
- 资源: 314
最新资源
- 师幼互动在中班幼儿英语教学中的研究及其改进策略
- 私立小学寄宿学生学习问题及其对策研究
- 【C语音期末/课程设计】教材管理系统(小熊猫C++项目)
- 素质教育视角下的小学班级管理方法探讨
- 拯救者PC,新年主题壁纸
- 素质教育背景下小学语文微课教学面临的问题及解决方案
- “学生活动管理自动化”:学生工作管理系统的技术实现
- 绥化华辰集团连锁超市存货风险管理与对策分析
- 一款很强大的随波逐流工具
- 拯救者电脑,新春团圆饭壁纸
- matlab轴承全寿命信号处理及时域,频域特征提取,数据集phm2012,自己的数据集改成自己的对应向量长度及样本个数即可
- 幼儿舞蹈教育中创造力培养策略
- FPGA实现 CIC抽值滤波 滤波器 verilog 仿真和matlab simulink仿真 vivado ise quartus软件均可以,匹配滤波器系数生成等 含说明 doc,电子ZL出不 ,这
- 青年租房新纪元:系统设计与管理策略
- 基于FPGA的脉冲发生器 脉冲间隔和宽度均可调
- 优化供应链:进销存管理系统开发指南