基于Python实现语义分析

发布于:2023-02-02 ⋅ 阅读:(314) ⋅ 点赞:(0)

1. 需求分析

能分析以下几类语句,并建立符号表及生成中间代码(三地址指令和 四元式形式):

  • 声明语句(包括变量声明、数组声明、记录声明和过程声明)
  • 表达式及赋值语句(包括数组元素的引用和赋值)
  • 分支语句:if_then_else
  • 循环语句:do_while
  • 过程调用语句

能够识别出测试用例中的语义错误,包括

  • 变量(包括数组、指针、结构体)或过程未经声明就使用
  • 变量(包括数组、指针、结构体)或过程名重复声明
  • 运算分量类型不匹配(也包括赋值号两边的表达式类型不匹配)
  • 操作符与操作数之间的类型不匹配
    • 赋值号左边出现一个只有右值的表达式
    • 数组下标不是整数
    • 对非数组变量使用数组访问操作符
    • 对非结构体类型变量使用“.”操作符
    • 对非过程名使用过程调用操作符
    • 过程调用的参数类型或数目不匹配
    • 函数返回类型有误

能准确给出错误所在位置。输出的错误提示信息格式如下: Semantic error at Line [行号]:[说明文字]

2. 文法设计

要求:给出如下语言成分所对应的语义动作

  • 声明语句(包括变量声明、数组声明、记录声明和过程声明)

在这里插入图片描述

  • 表达式及赋值语句(包括数组元素的引用和赋值)

在这里插入图片描述

  • 分支语句:if_then_else

在这里插入图片描述

  • 循环语句:do_while

在这里插入图片描述

  • 过程调用语句

在这里插入图片描述

3. 系统设计

要求:分为系统概要设计和系统详细设计。

  • 系统概要设计:给出必要的系统宏观层面设计图,如系统框架图、数据流图、功能模块结构图等以及相应的文字说明。

在这里插入图片描述

  • 系统详细设计:对如下工作进行展开描述

核心数据结构的设计

在这里插入图片描述

该结构为语法分析树的节点,用于存放单词的内容、属性、深度和子节点信息。

支持返回所有类中的所有实例。在返回属性信息时,如果该节点不具备该属性,会进行报错。

子节点信息和属性信息可以进行增加。
在这里插入图片描述

该结构为四元组,用于存放四元组内容。

同时对四元组的分析操作也包含在内

在这里插入图片描述

4. 系统实现及结果分析

要求:对如下内容展开描述。

  • 系统实现过程中遇到的问题;

该系统没有办法处理未经声明就使用的变量。因为在存储变量的属性时,使用了字典,在调用变量时,如果该变量未经声明,那么符号表中就没有它,也就没有关于它的字典的 key,那么程序会进行 keyerror 报错。

  • 针对一测试程序输出其语义分析结果;

测试样例如下:

struct student {
    int age;
}

int sum(int x, int y) {
    int ret;
    ret = x + y;
    return ret;
}

int main() {
    float a;
    a = 1.567;
    int b;
    int[5][5] c;
    c[1][1] = 10;
    b = c[1][1];
    int d;
    int *e;

    d = sum(b, c[1][1]);

    if(d > 10) {
        a = 1.0;
    } else {
        a = 2.0;
    }

    while(b < 10) {
        d = d + 1;
        b = b + 1;
    }

    return 0;
}

网站公告

今日签到

点亮在社区的每一天
去签到