隶属于
编译器开发文档.md
语法分析器的代码位于src/compiler/Parser.cpp
当中。
Parser类(stamon::c::Parser
)即为语法分析器的主体。
语法分析器的构造函数原型为:
(
Parser, STMException* e,
Matcher matcher, String filename,
SyntaxScope global_scope<SourceSyntax>* src, FileMap map,
ArrayList<String>* error_msg, bool is_support_import
ArrayList)
其中,matcher
为Token匹配器;global_scope
为给定的全局作用域;filename
为当前匹配的文件名;src
为一个以文件为单位所存储的AST列表,作为输出参数,在递归分析其他被引用的文件时,语法分析器会把被引用文件的AST加入到src,但其本身生成的AST并不会加入进去;map
用于标记某些文件是否被分析过(防止递归引用);error_msg
作为输出参数,用于存储报错信息;is_support_import
用于指示是否支持import(防止某些平台不支持文件处理)。
在初始化语法分析器后,调用ast::AstNode* Parse()
函数即可获得AST的根节点。
语法分析器主要采用递归分析,具体的文法请见src/compiler/ebnf.txt
。