#ifndef SYNTAXBASE_H #define SYNTAXBASE_H #include "libParse.h" #include "LexFoundation.h" namespace Syntax { /** * 解析结果标志. */ enum class ParseResult { SelfManipulate = 1, EnterNext = 2, Completed = 3, Failed = 4, }; /** * 解析器接口. */ class SyntaxParser { public: virtual ~SyntaxParser() = default; /** * 设置当前活动的Doc实例. * * \param ins */ virtual void docActive(Parse::Result::DocCore *ins) = 0; /** * 当前指向的文档. * * \return 文档实例 */ virtual Parse::Result::DocCore* docRef() const = 0; /** * 适配当前解析. * * \param seqs * \return */ virtual bool applied(const QList& seqs) = 0; /** * 重置解析器 */ virtual void reset() = 0; /** * 针对性的解析当前Token序列,对已经解析过的序列做摘除处理,返回下一步可能用到的解析器列表。 * * \param seqs 标记序列 * \param next_ps 下一步需要用到的解析器 * \return 解析操作类型 */ virtual ParseResult parse(QList& seqs)= 0; /** * 子解析器集合. * * \return */ virtual QList children() const = 0; /** * 当前聚焦的节点. * * \return */ virtual Parse::Result::DesNode* currNode() const = 0; protected: /** * 设置子元素解析器,内部元素解析器集合. * * \param parsers 解析器集合 */ virtual void addChild(QList parsers) = 0; }; } #endif // SYNTAXBASE_H