语义分析-哈工大编译原理第三次实验
来源:互联网 发布:mac adb unauthorized 编辑:程序博客网 时间:2024/05/17 23:57
实验3语义分析
实验目的
1. 巩固对语义分析的基本功能和原理的认识。
2. 能够基于语法指导翻译的知识进行语义分析。
3. 掌握类高级语言中基本语句所对应的语义动作。
4. 理解并处理语义分析中的异常和错误。
实验内容
在语法分析器的基础上设计实现类高级语言的语义分析器,基本功能如下:
(1) 能分析以下几类语句,并生成中间代码(三地址指令和四元式形式):
Ø 声明语句(包括变量声明、数组声明、记录声明和过程声明)
Ø 表达式及赋值语句(包括数组元素的引用和赋值)
Ø 分支语句:if_then_else
Ø 循环语句:do_while
Ø 过程调用语句
(2)具备语义错误处理能力,包括变量或函数重复声明、变量或函数引用前未声明、运算符和运算分量之间的类型不匹配(如整型变量与数组变量相加减)等错误,能准确给出错误所在位置,并采用可行的错误恢复策略。输出的错误提示信息格式如下:
Error at Line [行号]:[说明文字]
(3)系统的输入形式:要求能够通过文件导入测试用例。测试用例要涵盖第(1)条中列出的各种类型的语句,以及第(2)条中列出的各种类型的错误。
(4)系统的输出分为两部分:一部分是打印输出符号表。另一部分是打印输出三地址指令和四元式序列,格式如下图所示(以输入语句“while a<b do if c<d then x=y+z else x=y-z”为例):
1 : (j<, a , b , 3 ) if a <b goto 3
2 : ( j , - , - , 11) goto 11
3 : (j<, c , d , 5 ) if c <d goto 5
4 :( j , - , -, 8 ) goto8
5 :( + , y , z , t1) t1 =y + z
6 :( = , t1 , - , x ) x= t1
7 : ( j , - , - , 1 ) goto1
8 : ( - , y, z , t2) t2= y - z
9 : (= , t2 , - , x ) x = t2
10 : ( j , -, - , 1 ) goto 1
11:
除此之外,可以实现一些额外功能,例如自动类型转换,识别其它类型语义错误,如过程返回类型与声明类型不匹配;过程调用时实参与形参数目或类型不匹配;对非数组型变量使用数组访问操作符“[…]”;对普通变量使用过程调用操作符“call”;数组访问操作符“[…]”中出现非整数等。
圈重点!!!
实验指导书:http://download.csdn.net/download/qq_32285991/10125108
源代码:https://github.com/JiayanFighting/SemanticAnalysis
- 语义分析-哈工大编译原理第三次实验
- 哈工大软件学院编译原理实验3——语义分析
- 哈工大编译原理实验一词法分析
- 编译原理实验二:语义分析
- 哈工大编译原理第一次实验--词法分析(Java版本)
- 哈工大编译原理实验1——词法分析
- 编译语义分析实验
- 语法分析-哈工大编译原理实验二
- 编译原理语义分析
- 编译原理---语义分析
- 哈工大软件学院编译原理实验1——词法分析
- 哈工大软件学院编译原理实验2——语法分析
- 哈工大编译原理实验2——语法分析
- 编译原理之语法,语义,词法分析
- 【编译原理】:哈工大编译原理课程内容记录
- 编译原理实验----词法分析
- 编译原理实验---词法分析
- 编译原理实验一分析
- 小游戏制作2
- html页面之间的数据传递
- 初识Hadoop之Hadoop单机版搭建
- Contruct 2制作的HTML5游戏的简单介绍
- LeetCode Exercise 10: Merge Intervals
- 语义分析-哈工大编译原理第三次实验
- 关于重载new delete new[] delete[]笔记----C++学习之路
- 约束
- linux学习资源整理
- 将迭代器中元素(对象)放入数组中
- ArcGISEngine二次开发(4):属性查询(2)
- Matches(uva 11375)
- Linux命令(一)
- 人生就是不断自我颠覆——《颠覆者》读书心得