# 语法分析器文档

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

##### 怎样使用语法分析器？

在使用语法分析器之前，你需要有：

* 一个用于处理异常的STMException对象
* 一个已经将token全部分析完的Lexer对象
* 一个初始化完毕的Matcher对象

在初始化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``）
* 程序运行后，会将生成的AST输出到源码根目录下的``test.ast.txt``

##### 语法分析器的原理

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

> ——摘自``工作日志/20230205.md``