2025年春编译原理实验要求20250418(3)(1).docxVIP

  • 0
  • 0
  • 约4.08万字
  • 约 48页
  • 2025-08-10 发布于云南
  • 举报

2025年春编译原理实验要求20250418(3)(1).docx

编译原理实验要求

构建S-ONNX模型的编译器S-ONNXCompiler

目录

TOC\o1-3\h\z\u20612一、背景简介 3

25628二、任务一:撰写S-ONNXCompiler词法分析和语法分析程序 3

245072.1S-ONNX的词法规则 3

317062.2S-ONNX的语法规则 6

92112.3撰写S-ONNXCompiler的词法和词法分析程序 8

31184三、任务二:撰写S-ONNXCompiler语义分析与代码生成程序 8

6613.1S-ONNX模型的语义分析需求 9

109153.2S-ONNX模型的中间代码生成要求 11

20043.3S-ONNXCompiler的语义和代码生成任务 13

23264四、任务三:撰写错误处理程序 13

8656五、任务四:对S-ONNXComplier进行测试 13

19705六、实验报告要求 28

19203七、anltr4开源工具简介 29

5127八、手工撰写词法分析程序参考案例 32

272698.1Tiny语言的词法规则定义 32

86048.2基于自动机模型的Tiny语言的词法程序 32

7954九、手工撰写语法分析程序参考案例 42

18409.1Tiny语言语法规则定义 42

49329.2语法分析程序实现步骤 42

ONNX(OpenNeuralNetworkExchange)是一种开放的神经网络模型交换格式,广泛应用于不同深度学习框架之间的模型共享和迁移。ONNX通过标准化的模型表示,使得开发者能够在TensorFlow、PyTorch、Caffe等多种框架之间无缝地传递和部署神经网络模型,其核心是计算图,包括节点(NodeProto)、张量(TensorProto)和操作符(Operator)。

ONNX编译技术是将ONNX模型进行解析、优化,并生成适用于不同硬件平台的代码,以实现模型的高效推理和跨平台运行。本实验项目将对ONNX模型进行裁剪,形成S-ONNX(SimplifiedOpenNeuralNetworkExchange),保留了ONNX模型的核心结构和语义。本实验项目要求研制一款编译器S-ONNXCompiler(S-ONNXCompiler的编程语言不限),S-ONNXCompiler编译器需要完成以下任务:

依据S-ONNX的词法规则,把输入的S-ONNX源代码切分为词法单元,例如关键字、专用符号、标识符、常量等,为后续的语法分析提供基础;

根据S-ONNX的语法规则,对词法分析得到的词法单元序列进行分析,判断其是否符合S-ONNX的语法结构,并生成抽象语法树;

根据S-ONNX的语义要求,对S-ONNX模型进行语义检查;

在完成上述分析的基础上,将S-ONNX模型转换为三地址码表示的中间代码。

在以上实验的基础上,按照实验要求撰写实验报告。

任务一:撰写S-ONNXCompiler词法和语法分析程序

S-ONNX的词法规则

S-ONNX语言的关键字(31个):

关键字

含义

ModelProto

定义了S-ONNX模型的整体结构。一个完整的S-ONNX模型通常由ModelProto消息表示,这个消息包含了模型的多个重要部分,像版本信息、图结构、算子集导入等。

graph

用于定义神经网络模型中的计算图,是S-ONNX模型的核心部分,在其内部组织节点、输入、输出等元素,构建完整的模型计算逻辑

name

用于唯一标识各种元素

node

代表计算图中的节点,每个节点执行特定的运算操作,如卷积、加法等,是构成计算图的基本单元

input

指定模型的输入张量信息,包括输入的名称、数据类型、形状等,用于明确模型的输入数据

output

表示模型的输出张量信息,定义了模型计算后的输出结果

op_type

在定义节点时,用于指定节点所执行的操作类型,如“Conv”表示卷积操作、“Add”表示加法操作等

attribute

为节点添加额外的属性信息,例如卷积操作中的卷积核大小、步长等参数

initializer

当一个输入永不改变(例如线性回归的系数)时,将其转换为存储在图中的常量,即初始化器

doc_string

模型的可读文档,允许使用Markdown格式书写

domain

一个反向DNS名称,用于指示模型命名空间或域,如‘org.onnx’

model_version

模型本身的版本,以整数编码

producer_name

生成模型的工具名称

producer_version

生成工具的版本

type

一般用于指定张量、节点输入输出等的类型

文档评论(0)

1亿VIP精品文档

相关文档