分析一个单独的源码文件,我们可以使用Parser。
但是如果若干个源码互相引用,构建出了一个项目。则需要用预处理器来对整个项目进行分析。
本次新增了Preprocessor.cpp
和ParsingQueue.cpp
个文件。
我们先来看看ParsingQueue.cpp
。
ParsingQueue类用于Parser和Preprocessor两个类交互数据。这个类存储着带分析的源码。
Preprocessor每次会从ParsingQueue当中弹出一个待分析的源码。并用Parser进行分析。
Parser在分析该源码的过程中,如果要导入新的文件,会把这个文件加入到ParsingQueue中。
由此我们实现了多个文件的编译能力。
Preprocessor(STMException* e)
:构造函数。
ArrayList<SourceSyntax> ParseSource(String origin, bool isSupportImport)
:分析整个源码项目。origin
为分析的入口文件名(即整个项目的总文件);isSupportImport
这个代表这个项目是否支持引用,如果该值为false,代表只支持分析一个源文件,否则代表支持分析多个文件。
ArrayList<String> ErrorMsg
:在分析一个项目的过程中,难免会有多个源文件出现多个报错。这个数组就存储着所有的报错。如果整个项目没有任何报错则该数组为空。
预处理器的具体用法和案例,详见测试样例test_case/preprocessor/
预处理器的测试样例位于test_case/preprocessor/
中。
在该目录当中,附有code.st
,这是测试用的Stamon代码。当然,你也可以更改code.st,来进行多次调试。
使用样例,应该这么做:
test_case/preprocessor/test.cpp
覆盖到test/test.cpp
当中test_case/preprocessor/code.st
复制并粘贴到源码根目录当中doc/调试指南.md
)test.ast.txt
——摘自
工作日志/20240207.md