Skip to content

Commit 2b18a2b

Browse files
committed
refactor(stvcio): move stvcio to astirio
1. rename STVCReader.cpp and STVCWriter.cpp to AstIrReader.cpp and AstIrWriter.cpp 2. move AstIrReader.cpp and AstIrWriter.cpp to action directory 3. fix a not-fatal bug please refer to the work log for details
1 parent 0d04d50 commit 2b18a2b

19 files changed

+78
-32
lines changed

.vscode/c_cpp_properties.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"${workspaceFolder}/src/ir/",
1111
"${workspaceFolder}/src/compiler/",
1212
"${workspaceFolder}/src/sfn/",
13+
"${workspaceFolder}/src/action/",
1314
"${workspaceFolder}/src/"
1415
],
1516
"defines": [],

CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.22.0)
22

33
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
44

5-
project(Stamon VERSION 2.4.8)
5+
project(Stamon VERSION 2)
66

77
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
88
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
@@ -39,6 +39,7 @@ include_directories(${PROJECT_SOURCE_DIR}/src/ir)
3939
include_directories(${PROJECT_SOURCE_DIR}/src/compiler)
4040
include_directories(${PROJECT_SOURCE_DIR}/src/sfn)
4141
include_directories(${PROJECT_SOURCE_DIR}/src/tac)
42+
include_directories(${PROJECT_SOURCE_DIR}/src/action)
4243

4344
set(CMAKE_C_FLAGS_DEBUG "-g -Og -DDEBUG")
4445
set(CMAKE_CXX_FLAGS_DEBUG "-g -Og -DDEBUG")

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ LINK = -I include/stdc_implemented \
1313
-I src/compiler \
1414
-I src/sfn \
1515
-I src/tac \
16+
-I src/action \
1617
-I src \
1718
-lm
1819

demos/demo.stvc

-8 Bytes
Binary file not shown.

demos/demo1.stvc

-8 Bytes
Binary file not shown.

demos/demo2.stvc

-8 Bytes
Binary file not shown.
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
1-
# 虚拟机开发文档
1+
# AstRunner开发文档
2+
3+
> 注意:此文档旨在说明``AstRunner``(以下简称“虚拟机”)的工作原理
24
35
虚拟机的运行原理为:将二进制文件读取为AstIR,交给AstIRGenerator类解析为Running-Ast,最后交给``vm/AstRunner.cpp``递归运行。
46

57
我们规定:Stamon编译后的二进制文件为**STVC文件**,文件后缀为``.stvc``
68

79
我们来逐步讲解。
810

9-
首先是二进制文件读取为AstIR,这部分的实现位于``src/vm/STVCReader.cpp``STVCReader类的主要接口有
11+
首先是二进制文件读取为AstIR,这部分的实现位于``src/vm/AstIrReader.cpp``AstIrReader类的主要接口有
1012

11-
* ``STVCReader(char* vmcode, int code_size, STMException* e)``:构造函数,vmcode为字节码在内存中的地址,code_size指字节码的大小,e为异常类
13+
* ``AstIrReader(char* vmcode, int code_size, STMException* e)``:构造函数,vmcode为字节码在内存中的地址,code_size指字节码的大小,e为异常类
1214
* ``bool ReadHeader()``:读取字节码头,读取失败则抛出异常并返回false,否则返回true
1315
* ``ArrayList<AstIR> ReadIR()``:读取AstIR,返回由AstIR组成的ArrayList
1416

15-
想要完整的读取一个STVC文件,应该要先创建一个STVCReader对象,然后先调用``ReadHeader``读取文件头信息,接着调用``ReadIR``来读取AstIR。调用这两个函数之后要分别检查是否有异常抛出。
17+
想要完整的读取一个STVC文件,应该要先创建一个AstIrReader对象,然后先调用``ReadHeader``读取文件头信息,接着调用``ReadIR``来读取AstIR。调用这两个函数之后要分别检查是否有异常抛出。
1618

1719
接着是让AstIRGenerator类解析为Running-Ast,这一部分在**写了Ast与AstIR之间的互转工具**部分里已经详细提及过了,故不再赘述。
1820

doc/STVC-TAC中间代码规范.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
##### 什么是STVC-TAC?
66

7-
``STVC-TAC``(以下简称``STVC``)是一种以三地址码为基础的平面字节码规范。
7+
``STVC-TAC``又称``TAC-IR``以下简称``STVC``)是一种以三地址码为基础的平面字节码规范。
88

99
> ``STVC-TAC``区别于``AST-IR``,前者的字节码是线性且平面的,而后者则是递归且树状的。
1010

doc/分步行动机制文档.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 分步行动机制文档
22

3-
为了让项目更接近于“高内聚,低耦合”的状况,我提出了分步行动机制(Substep-Action)。
3+
为了让项目更接近于“高内聚,低耦合”的状况,我提出了分步行动机制(Substep-Action,又称分步动作机制)。
44

55
### 前言
66

@@ -36,7 +36,7 @@
3636

3737
我们以编译过程为例,传统的编译过程可以被分解为以下行动工具:
3838

39-
文本文件读取器(用户给定文件名作为行动物品,生成一个行读取器)->词法分析器(接受到文本文件读取器传来的行阅读器,生成一个词法单元读取器)->语法分析器(接受到词法分析器传来的词法单元读取器,生成语法树)->ASTIR生成器(接收到语法分析器传来的语法树,生成Ast-IR)->STVCWriter(接收到ASTIR生成器的Ast-IR,同时接受到用户指定的行动物品——目标文件名,将其以二进制形式写入用户给定的目标文件名)
39+
文本文件读取器(用户给定文件名作为行动物品,生成一个行读取器)->词法分析器(接受到文本文件读取器传来的行阅读器,生成一个词法单元读取器)->语法分析器(接受到词法分析器传来的词法单元读取器,生成语法树)->ASTIR生成器(接收到语法分析器传来的语法树,生成Ast-IR)->AstIrWriter(接收到ASTIR生成器的Ast-IR,同时接受到用户指定的行动物品——目标文件名,将其以二进制形式写入用户给定的目标文件名)
4040

4141
行动工具生成的行动物品交给下一个行动工具处理,环环相扣。但是你不能让以下行动工具按顺序执行:
4242

@@ -83,9 +83,9 @@
8383
* **AstWriterTool**:写入语法树文件,接受AstItem和用户提供的物品(文件名),不生成物品。
8484
* **ParserTool**:语法分析,接受TokenReaderItem以及用户加入的物品,生成AstItem
8585
* **AstIRTool**:将Ast转为Ast-IR,接受AstItem以及用户加入的物品,生成AstIRItem
86-
* **STVCWriterTool**:将Ast-IR写入二进制文件,接受AstIRItem和用户加入的物品(文件名),不生成行动物品
86+
* **AstIrWriterTool**:将Ast-IR写入二进制文件,接受AstIRItem和用户加入的物品(文件名),不生成行动物品
8787
* **STVCBufferWriterTool**:将Ast-IR以二进制格式写入内存,接受AstIRItem以及用户加入的物品,生成BufferItem
88-
* **STVCReaderTool**:打开Ast-IR的STVC文件,只接受用户提供的物品(文件名),生成AstRunnerItem
88+
* **AstIrReaderTool**:打开Ast-IR的STVC文件,只接受用户提供的物品(文件名),生成AstRunnerItem
8989
* **STVCBufferReaderTool**:将指定的内存按照Ast-IR的二进制格式读取,接受BufferItem以及用户加入的物品,生成AstRunnerItem
9090
* **AstRunnerTool**:运行Running-Ast,接受AstRunnerItem以及用户加入的物品,不生成行动物品
9191

doc/工作日志/20240510.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,13 +217,13 @@ SFN类的主要接口有:
217217

218218
我们来逐步讲解。
219219

220-
首先是二进制文件读取为AstIR,这部分的实现位于``src/vm/STVCReader.cpp``STVCReader类的主要接口有
220+
首先是二进制文件读取为AstIR,这部分的实现位于``src/vm/AstIrReader.cpp``AstIrReader类的主要接口有
221221

222-
* ``STVCReader(char* vmcode, int code_size, STMException* e)``:构造函数,vmcode为字节码在内存中的地址,code_size指字节码的大小,e为异常类
222+
* ``AstIrReader(char* vmcode, int code_size, STMException* e)``:构造函数,vmcode为字节码在内存中的地址,code_size指字节码的大小,e为异常类
223223
* ``bool ReadHeader()``:读取字节码头,读取失败则抛出异常并返回false,否则返回true
224224
* ``ArrayList<AstIR> ReadIR()``:读取AstIR,返回由AstIR组成的ArrayList
225225

226-
想要完整的读取一个STVC文件,应该要先创建一个STVCReader对象,然后先调用``ReadHeader``读取文件头信息,接着调用``ReadIR``来读取AstIR。调用这两个函数之后要分别检查是否有异常抛出。
226+
想要完整的读取一个STVC文件,应该要先创建一个AstIrReader对象,然后先调用``ReadHeader``读取文件头信息,接着调用``ReadIR``来读取AstIR。调用这两个函数之后要分别检查是否有异常抛出。
227227

228228
接着是让AstIRGenerator类解析为Running-Ast,这一部分在**写了Ast与AstIR之间的互转工具**部分里已经详细提及过了,故不再赘述。
229229

0 commit comments

Comments
 (0)