90 lines
1.9 KiB
C
90 lines
1.9 KiB
C
|
#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<Lex::LexResult>& seqs) = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* 重置解析器
|
|||
|
*/
|
|||
|
virtual void reset() = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* 针对性的解析当前Token序列,对已经解析过的序列做摘除处理,返回下一步可能用到的解析器列表。
|
|||
|
*
|
|||
|
* \param seqs 标记序列
|
|||
|
* \param next_ps 下一步需要用到的解析器
|
|||
|
* \return 解析操作类型
|
|||
|
*/
|
|||
|
virtual ParseResult parse(QList<Lex::LexResult>& seqs)= 0;
|
|||
|
|
|||
|
/**
|
|||
|
* 子解析器集合.
|
|||
|
*
|
|||
|
* \return
|
|||
|
*/
|
|||
|
virtual QList<SyntaxParser*> children() const = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* 当前聚焦的节点.
|
|||
|
*
|
|||
|
* \return
|
|||
|
*/
|
|||
|
virtual Parse::Result::DesNode* currNode() const = 0;
|
|||
|
|
|||
|
protected:
|
|||
|
/**
|
|||
|
* 设置子元素解析器,内部元素解析器集合.
|
|||
|
*
|
|||
|
* \param parsers 解析器集合
|
|||
|
*/
|
|||
|
virtual void addChild(QList<SyntaxParser*> parsers) = 0;
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
#endif // SYNTAXBASE_H
|