2024/02/07 工作日志

更新了依赖库

本次新增了FileMap类,扩充了stmlib.hppArrayList.hpp

stmlib.hpp主要更新了各种数据类型(诸如intbool)转为String的方法。

ArrayList.hpp重载了+运算符和+=运算符(详见源码)。

在stamon中导入一个代码文件,需要输入对应的文件位置。FileMap就负责处理这份工作。

当stamon导入一个新的代码文件时会向FileMap进行申请(即调用AddSource方法),FileMap会检查这个代码文件是否已经被导入。如果没有,则会标记这个文件“已经被导入过”,并且返回打开这个文件的LineReader。(详见LineReader.cpp

新增了预处理器

分析一个单独的源码文件,我们可以使用Parser。

但是如果若干个源码互相引用,构建出了一个项目。则需要用预处理器来对整个项目进行分析。

本次新增了Preprocessor.cppParsingQueue.cpp个文件。

预处理器原理

我们先来看看ParsingQueue.cpp

ParsingQueue类用于Parser和Preprocessor两个类交互数据。这个类存储着带分析的源码。

Preprocessor每次会从ParsingQueue当中弹出一个待分析的源码。并用Parser进行分析。

Parser在分析该源码的过程中,如果要导入新的文件,会把这个文件加入到ParsingQueue中。

由此我们实现了多个文件的编译能力。

怎样使用Preprocessor

预处理器的具体用法和案例,详见测试样例test_case/preprocessor/

使用预处理器的测试样例

预处理器的测试样例位于test_case/preprocessor/中。

在该目录当中,附有code.st,这是测试用的Stamon代码。当然,你也可以更改code.st,来进行多次调试。

使用样例,应该这么做:

接下来要做的事

  1. 编写AST的解释器
  2. 编写Token和AST的保存功能
  3. 完成SFN功能
  4. 编写AST的O1优化器

后记

本文档采用语音转文字编写,出现个别错别字请谅解。

但是不得不说语音转文字写文档就是快。