#pragma once #include "libsyntax.h" #include "ast_basic.h" namespace ast_gen { /** * @brief 语法解析器 */ class LIBSYNTAX_EXPORT SyntaxParser { private: std::shared_ptr _rule_bind = nullptr; public: SyntaxParser(std::shared_ptr rule); /** * @brief 依据源码语法规则,解析源码链表 * @param wods 源码链表 * @return 所有解析路径,按照错误数量排序:少->多 */ QList> parse(std::shared_ptr words); /** * @brief 依据指定解析路径,提取程序解构 * @param cursor 解析路径 * @param root 表达式树预制根节点 * @return 完善后的根节点 */ std::shared_ptr getAst( std::shared_ptr cursor, std::shared_ptr root); void astPresent(std::shared_ptr node, int depth = 0); }; }