2024/02/05 工作日志

修复了一些bug

主要修复了src/ast中一些小瑕疵。

更新了依赖库

首先,新增了行阅读器(LineReader类)。

LineReader用于逐行读取文本并送入词法分析器中,它的接口很简便:

用户在调用getLine()前理应先调用isMore()查看是否还有剩余文本;否则容易导致程序错误。

其次,更新了异常处理库。

以往的异常处理库非常简陋,设计方式是典型的面向过程。但是考虑到将来可能会多线程运行编译器/虚拟机,所以我将异常处理库封装为面向对象的。

宏的用法基本不变,用法过于简单,文档不再赘述,详见Exception.cpp

编写了语法分析器

经过了将近两周的编写,语法分析器终于完工。

语法分析器的代码位于src/compiler/Parser.cpp当中。 Parser类(stamon::c::Parser)即为语法分析器的主体。

怎样使用语法分析器?

在使用语法分析器之前,你需要有:

在初始化Parser后,调用Parse()方法,即可进行语法分析,并返回语法树的根节点。如果语法分析出错,则返回NULL,并将错误存入STMException对象当中

详细请见测试用例test_case/parser

使用语法分析器的测试样例

语法分析器的测试样例位于test_case/parser中。

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

使用样例,应该这么做:

语法分析器的原理

语法分析器主要采用递归分析,具体的文法请见src/compiler/ebnf.txt

整理了文档

我将工作日志中的一些内容摘编成一份份文档。

接下来要做的事

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