• 基于Python实现语义分析


    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
  • 相关阅读:
    “传统”开发与AI开发的区别与联系(更新了GPT3.5的反馈)
    服务器密码机主要功能及特点 安当加密
    六月集训(23)字典树
    《算法通关村第二关——终于学会链表反转了》
    CentOS 7镜像下载;VMware安装CentOS 7;解决新安装的虚拟机没有网络,无法ping通网络的问题
    OpenCV_Mat类对象的基本操作、常用操作及相关成员函数介绍
    【Web安全】HTML5安全
    MindSearch:AI 时代的“思考型”搜索引擎
    RefConv: 重参数化的重新聚焦卷积(论文翻译)
    Mac中Carthage的安装和使用
  • 原文地址:https://blog.csdn.net/newlw/article/details/126126945