ClickHouse/dbms/Parsers/IParserBase.h

45 lines
839 B
C++
Raw Normal View History

#pragma once
2010-06-24 19:12:10 +00:00
#include <Parsers/IParser.h>
2010-06-24 19:12:10 +00:00
namespace DB
{
2017-05-27 17:29:55 +00:00
/** Base class for most parsers
2010-06-24 19:12:10 +00:00
*/
class IParserBase : public IParser
{
public:
2019-12-01 22:01:05 +00:00
template <typename F>
static bool wrapParseImpl(Pos & pos, const F & func)
{
Pos begin = pos;
bool res = func();
if (!res)
pos = begin;
return res;
}
struct IncreaseDepthTag {};
template <typename F>
static bool wrapParseImpl(Pos & pos, IncreaseDepthTag, const F & func)
{
Pos begin = pos;
pos.increaseDepth();
bool res = func();
pos.decreaseDepth();
if (!res)
pos = begin;
return res;
}
bool parse(Pos & pos, ASTPtr & node, Expected & expected) override;
2010-06-24 19:12:10 +00:00
protected:
virtual bool parseImpl(Pos & pos, ASTPtr & node, Expected & expected) = 0;
2010-06-24 19:12:10 +00:00
};
}