本实验由词汇设计、语法设计、语义设计和窗口界面设计四部分组成。
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.橱窗设计


