root/trunk/compiler/cppAst/ast/Ast.hpp @ 2
2 | krennw | /**
|
|
*
|
|||
* OOAS Compiler - C++ AST
|
|||
*
|
|||
* Copyright 2015, AIT Austrian Institute of Technology.
|
|||
* All rights reserved.
|
|||
*
|
|||
* SEE THE "LICENSE" FILE FOR THE TERMS UNDER WHICH THIS FILE IS PROVIDED.
|
|||
*
|
|||
* If you modify the file please update the list of contributors below to in-
|
|||
* clude your name. Please also stick to the coding convention of using TABs
|
|||
* to do the basic (block-level) indentation and spaces for anything after
|
|||
* that. (Enable the display of special chars and it should be pretty obvious
|
|||
* what this means.) Also, remove all trailing whitespace.
|
|||
*
|
|||
* Contributors:
|
|||
* Willibald Krenn (AIT)
|
|||
* Stephan Zimmerer (AIT)
|
|||
* Christoph Czurda (AIT)
|
|||
*
|
|||
*/
|
|||
#pragma once
|
|||
#include <cstdint>
|
|||
#include <deque>
|
|||
#include <base/TiresiasObject.hpp>
|
|||
class CallContext;
|
|||
namespace Ast {
|
|||
/**
|
|||
* Forward declarations of the AST classes
|
|||
*/
|
|||
class TypeIdentifier;
|
|||
class EnumIdentifier;
|
|||
//class ValuedEnumIdentifier;
|
|||
class AttributeIdentifier;
|
|||
class LocalVariableIdentifier;
|
|||
class ParameterIdentifier;
|
|||
class ExpressionVariableIdentifier;
|
|||
class MethodIdentifier;
|
|||
class NamedActionIdentifier;
|
|||
class Module;
|
|||
class ConstantIdentifier;
|
|||
class IntType;
|
|||
class BoolType;
|
|||
class EnumType;
|
|||
class ListType;
|
|||
class TupleType;
|
|||
class NullType;
|
|||
class FunctionType;
|
|||
class ActionSystemType;
|
|||
class GuardedCommand;
|
|||
class Call;
|
|||
class Assignment;
|
|||
class SeqBlock;
|
|||
class NondetBlock;
|
|||
class PrioBlock;
|
|||
class Skip;
|
|||
class Break;
|
|||
class Abort;
|
|||
class TernaryOperator;
|
|||
class BinaryOperator;
|
|||
class UnaryOperator;
|
|||
class ExistsQuantifier;
|
|||
class ForallQuantifier;
|
|||
class ListConstructor;
|
|||
class SetConstructor;
|
|||
class TupleConstructor;
|
|||
class ObjectConstructor;
|
|||
class IdentifierExpression;
|
|||
class BoolValueExpression;
|
|||
class IntValueExpression;
|
|||
class RefValueExpression;
|
|||
class TypeExpression;
|
|||
class TupleMapAccessExpression;
|
|||
class CallExpression;
|
|||
class AccessExpression;
|
|||
class UnspecIdentifierBlock;
|
|||
class SeqIdentifierBlock;
|
|||
class NondetIdentifierBlock;
|
|||
class PrioIdentifierBlock;
|
|||
class MainModule;
|
|||
class PointerType;
|
|||
class ActionSystemInstance;
|
|||
class ValuedEnumType;
|
|||
class ExpressionList;
|
|||
class StatementList;
|
|||
class IdentifierList;
|
|||
class ParameterList;
|
|||
class TypeList;
|
|||
class ActionSystemInstanceList;
|
|||
enum class ExpressionKind: std::uint8_t;
|
|||
enum class TypeKind : std::uint8_t;
|
|||
enum class StatementKind: std::uint8_t;
|
|||
enum class IdentifierKind: std::uint8_t;
|
|||
class SymbolTable;
|
|||
class Type;
|
|||
class Statement;
|
|||
class Identifier;
|
|||
class Expression;
|
|||
/**
|
|||
* Facade
|
|||
*/
|
|||
class Ast final {
|
|||
private:
|
|||
CallContext* m_context;
|
|||
/* List of owned AST objects */
|
|||
std::deque<Base::TiresiasObject*> m_allocatedAstObjects;
|
|||
Base::TiresiasObject* takeOwnership(Base::TiresiasObject* obj);
|
|||
public:
|
|||
Ast(CallContext* context);
|
|||
~Ast();
|
|||
// Constructors: All the objects created are owned by this AST. IOW once
|
|||
// this object is gone, all the created elements as well.
|
|||
// ALL the copy constructors will do a shallow copy. Use the clone visitor to get a deep clone.
|
|||
Type* createType(TypeKind t);
|
|||
Type* createType(const Type& toCopy);
|
|||
Statement* createStatement(StatementKind t); // new, empty statement
|
|||
Statement* createStatement(const Statement& toCopy); // shallow copy statement
|
|||
Statement* deepCopyStatement(Statement* toCopy); // deep copy statement
|
|||
Identifier* createIdentifier(IdentifierKind t);
|
|||
Identifier* createIdentifier(const Identifier& toCopy);
|
|||
Expression* createExpression(ExpressionKind t); // new, empty expression
|
|||
Expression* createExpression(const Expression& toCopy); // shallow copy expression
|
|||
Expression* deepCopyExpression(Expression* toCopy); // deep copy expression
|
|||
ActionSystemInstance* createActionSystemInstance();
|
|||
ActionSystemInstance* createActionSystemInstance(const ActionSystemInstance& toCopy);
|
|||
ExpressionList* createExpressionList();
|
|||
ExpressionList* createExpressionList(const ExpressionList& toCopy);
|
|||
IdentifierList* createIdentifierList();
|
|||
IdentifierList* createIdentifierList(const IdentifierList& toCopy);
|
|||
StatementList* createStatementList();
|
|||
StatementList* createStatementList(const StatementList& toCopy);
|
|||
ParameterList* createParameterList();
|
|||
ParameterList* createParameterList(const ParameterList& toCopy);
|
|||
TypeList* createTypeList();
|
|||
TypeList* createTypeList(const TypeList& toCopy);
|
|||
ActionSystemInstanceList* createActionSystemInstanceList();
|
|||
ActionSystemInstanceList* createActionSystemInstanceList(const ActionSystemInstanceList& toCopy);
|
|||
SymbolTable* createSymbolTable();
|
|||
SymbolTable* createSymbolTable(const SymbolTable& toCopy);
|
|||
};
|
|||
}
|