主要修复了src/ast
中一些小瑕疵。
首先,新增了行阅读器(LineReader
类)。
LineReader用于逐行读取文本并送入词法分析器中,它的接口很简便:
String getLine()
:读取一行,并将结果以String形式返回bool isMore()
:是否还有文本尚未读取,如果有,则返回true用户在调用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,来进行多次调试。
使用样例,应该这么做:
test_case/parser/test.cpp
覆盖到test/test.cpp
当中test_case/parser/code.st
复制并粘贴到源码根目录当中doc/调试指南.md
)test.ast.txt
语法分析器主要采用递归分析,具体的文法请见src/compiler/ebnf.txt
。
我将工作日志中的一些内容摘编成一份份文档。