当前位置: 首页 > news >正文

编译原理实验 之 TINY 之 语义分析(第二次作业)

文章目录

本实验是接着前面的两个实验的基础上进行完善的,所以对于前面的实验如何操作?请看我的另外两个博客~

编译原理 之 实验一

编译原理实验 之 Tiny C语言编译程序实验 语法分析

  • 首先明确一下这次实验的任务?

主要目的:实现符号表管理和类型检查,确保TINY C语言程序的语义正确性,为后续代码生成提供基础

  • 符号表生成器(symtab.c):管理变量信息

  • 核心任务:

    • 建立符号表:使用散列表存储变量的名称、内存位置、引号行号等信息
    • 插入符号表条目:在语法树遍历过程中,将变量名插入符号表,并记录其首次出现的内存位置和后续引用的行号
  • 语义分析器(annalyze.c):类型检查

  • 核心任务:

    • 遍历语法树:通过后根遍历,从叶子到根,检查各语法结构的类型是否一致
    • 类型检查规则:
      • 表达式类型,确保算术运算符和关系运算符的操作数类型匹配
      • 语句类型,检查赋值语句、条件语句、循环语句的类型兼容性

总的来说,需要补充以下的文件:symtab.canalyze.csymtab.hanalyze.hmain.c

symtab.h

  • 只需完善这个 st_insert函数即可

analyze.c

  • 只需完善checkNode函数即可

symtab.h

  • 不用修改

analyze.h

  • 稍微修改一下函数的参数

在这里插入图片描述
main.c

  • 参数设置为:
/* set NO_PARSE to FALSE to enable the parser */
#define NO_PARSE FALSE
/* set NO_ANALYZE to FALSE to enable semantic analysis */
#define NO_ANALYZE FALSE
/* set NO_CODE to TRUE to disable code generation */
#define NO_CODE TRUE// .../* allocate and set tracing flags */
int EchoSource = TRUE;
int TraceScan = FALSE;     // 禁用词法分析输出
int TraceParse = TRUE;     // 启用语法分析输出
int TraceAnalyze = TRUE;   // 启用语义分析输出
int TraceCode = FALSE;
int Error = FALSE;

上面需要补充的程序,自己根据自己的理解补充完整,下面给出具体的运行指令

  • 补充完整之后,通过下面的命令进行编译
gcc main.c util.c scan.c parse.c analyze.c symtab.c -o tiny
  • 运行测试
./tiny SAMPLE.TNY

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

其实只要第三张图片即可,所以你们交作业的时候,只用给出第三张图即可,也可以修改main.c的参数,只输出符号表和检查子程序的结果

http://www.xdnf.cn/news/771283.html

相关文章:

  • PHP舆情监控分析系统(9个平台)
  • 机器学习:支持向量机(SVM)原理解析及垃圾邮件过滤实战
  • Qt信号与槽机制深度解析
  • 【Godot】如何导出 Release 版本的安卓项目
  • 【笔记】Windows 下载并安装 ChromeDriver
  • IO模型IO模型
  • ISO18436-2 CATII级振动分析师能力矩阵
  • 振动分析师(ISO18436-2)四级能力矩阵 - 简介
  • ROS机器人和NPU的往事和新知-250602
  • python打卡训练营打卡记录day43
  • 阿里云服务器-解决宝塔登录不成功
  • DAY 41 简单CNN
  • 审计 - 风险应对 - 控制测试
  • springboot04
  • 2025年十大AI幻灯片工具深度评测与推荐
  • C++.cstring string
  • 线段树刷题记录
  • 数据治理的演变与AI趋势
  • 零基础开始的网工之路第十七天------计算机网络知识
  • 机器学习——集成学习
  • STM32入门教程——GPIO输入
  • 使用Mathematica观察多形式根的分布随参数的变化
  • mysql数据库实现分库分表,读写分离中间件sharding-sphere
  • 数据库MySQL集群MGR
  • NiceGUI 是一个基于 Python 的现代 Web 应用框架
  • PyTorch——卷积层(3)
  • MapReduce(期末速成版)
  • 检索器组件深入学习与使用技巧 VectorStoreRetriever 检索器
  • android binder(二)应用层编程实例
  • 基于 Android 和 JBox2D 的简单小游戏