ClickHouse/dbms/include/DB/Parsers/IAST.h
2011-08-09 19:19:00 +00:00

70 lines
1.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <list>
#include <sstream>
#include <Poco/SharedPtr.h>
#include <DB/Core/Types.h>
#include <DB/Parsers/StringRange.h>
namespace DB
{
using Poco::SharedPtr;
/** Элемент синтаксического дерева (в дальнейшем - направленного ациклического графа с элементами семантики)
*/
class IAST
{
public:
typedef std::list<SharedPtr<IAST> > ASTs;
/** Получить кусок текста, откуда был получен этот элемент. */
virtual StringRange getRange() = 0;
/** Получить всех детей. */
virtual ASTs getChildren() = 0;
/** Получить текст, который идентифицирует этот элемент. */
virtual String getID() = 0;
/** Получить текст, который идентифицирует этот элемент и всё поддерево.
* Обычно он содержит идентификатор элемента и getTreeID от всех детей.
*/
virtual String getTreeID()
{
std::stringstream s;
s << getID();
ASTs children = getChildren();
if (!children.empty())
{
s << "(";
for (ASTs::iterator it = children.begin(); it != children.end(); ++it)
{
if (it != children.begin())
s << ", ";
s << (*it)->getTreeID();
}
s << ")";
}
return s.str();
}
IAST() : calculated(false) {}
virtual ~IAST() {}
/// Было ли соответствующее выражение вычислено.
bool calculated;
};
typedef SharedPtr<IAST> ASTPtr;
typedef std::list<ASTPtr> ASTs;
}