2021编译技术实验文法定义及相关说明1

preview
需积分: 0 1 下载量 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`用于初始化常量,可以是常量表达式或数组初始化。 实验要求学生不仅要理解这些基本概念,还需要编写能够覆盖所有语法规则的测试程序,以验证编译器的正确性。通过这个实验,学生将深入理解编译器的工作原理和语言的文法结构。