程序设计语言实验报告

核心提示本次实验一共由四个部分组成,分别是词法设计、语法设计、语义设计以及窗口界面设计。1. 词法分析读入文件设计词法分析函数LexicalAnalysisv 将SNL程序按照分类的不同进行存储,存储在temchar数组中,存储的信息包含类型,字符

本实验由词汇设计、语法设计、语义设计和窗口界面设计四部分组成。

1.词汇分析

读入文件

设计词法分析功能

vsnl程序按照不同的分类存储,存储在temchar数组中。存储的信息包括类型、字符串、长度和位置。当遇到空或其他不同类型的字符时,长度重置,位置下移。

调用takeToken函数来分析令牌序列。

设计令牌序列生成函数采用令牌

v每生成一个新的temchar数组元素,就调用takeToken函数进行更具体的分类,分类结果存储在Token数组中。存储的信息包括行数、字符串和类型。

输出令牌序列。

根据V的类型调整输出内容,并将其存储在。txt文件。

2.语法分析-递归下降法

语法树结构

树节点

函数调用关系

3.语法分析-LL1方法

语法和树节点结构与递归下降法相同。

主要功能

LL解析的主要功能有:Parse、CreatLLlTable、priosity等。

解析函数是最重要的函数。它使用LL分析表和符号栈进行语法分析,并处理了最终符号的不匹配和提前结束文件的错误。对函数进行处理后,就得到完整的语法树。

creatllltable 1 e用于创建LL分析表。ll分析表用二维数组表示,二维数组的所有元素初始化为0,产生式按照给定的LL文法编号。对于每个产品,左边部分的非终止字符用作行号,其预测集中的每个元素用作列号,二维数组中行号和列号对应的元素被指定为产品的编号。

优先级用于判断当前操作员的优先级。优先级从高到低的顺序是:乘法运算符>加法运算符>关系运算符>左括号>栈尾标志。

流程图

4.语义分析

构造符号表和删除符号表。

符号表的结构

类型标识符

变量标识符

进程标识符

类型内部表示

记录域表

表单参数信息表

局部符号表示意图。

符号表的操作

形容词(adjective的缩写)符号表的创建、删除和搜索

Create:当前图层级别加1表示已经创建了新的符号表,但没有真正创建符号表;当遇到新符号表的第一个元素时,让scope[Level]指向它。

删除:当前图层级别减1表示删除当前符号表。

查找:使用简单的顺序查找方法来查找符号表。

B.符号表的本地化

每个本地化单元都有一个符号表。使用作用域堆栈,堆栈的所有元素都指向一个局部符号表。

符号表的实现

形容词(adjective的缩写)创建符号表

功能:空可创建

函数:创建空的符号表,层数加1,偏移量初始化为0。

算法:Off赋值初始值initOff

B.撤销符号表

功能:作废销毁表

流程:级别=级别-1

碳(carbon的缩写)在符号表中注册标识符和属性

函数:布尔输入

算法说明:如下框图

形容词(adjective的缩写)在符号表中查找标识符

函数:bool FindEntry

算法说明:如下框图

B.在域表中查找域名

函数:布尔查找字段

算法:从域头开始,比较节点中的标识符名称和id,看是否相同,直到找到标识符或到达表尾。如果找到,则返回真值,Entry是标识符在符号表中的位置;否则,返回值为假。

碳(carbon的缩写)打印符号表

功能:无效输入符号/无效输入销毁符号

检查语义错误。

l型分析处理功能

形容词(adjective的缩写)功能:类型*类型流程

B.算法流程:如下框图

l型声明部分分析处理函数

功能:void TypeDecPart

流程:如下框图

l变量声明部分分析处理函数

函数:void VarDecList

流程:如下框图

l过程声明部分分析处理功能

功能:作废产品零件

流程:如下框图

l参数处理分析功能

函数:参数表*悖论

流程:如下框图

l语句序列分析处理功能

功能:void语句

流程:如下框图

还有一些涉及语义错误分析的函数,比如Expr,arrayVar,recordVar等等。

5.橱窗设计

程序和操作截图

1.词法分析操作截图

2.解析操作的屏幕截图

递归下降

LL1

3.语义分析操作截图

4.表单运行的屏幕截图

源代码

1.词汇分析

词汇分析功能

TakeToken函数

2.

语法分析-递归下降法

3.

语法分析-LL1方法

4.语义分析

5.橱窗设计

 
友情链接
鄂ICP备19019357号-22