PerceMon
ast.hpp
1#pragma once
2
3#ifndef __PERCEMON_AST_HPP__
4#define __PERCEMON_AST_HPP__
5
6#include "percemon/ast/functions.hpp"
7#include "percemon/ast/primitives.hpp"
8#include "percemon/ast/s4u.hpp"
9#include "percemon/ast/tqtl.hpp"
10
11#include <stdexcept>
12
13namespace percemon {
14// TODO(anand): Create functions that return the Node pointers.
15using namespace ast::primitives;
16using namespace ast::functions;
17
18using ast::Expr;
19using ast::Pin;
20
21ast::PinPtr Pinned(Var_x x, Var_f f);
22ast::PinPtr Pinned(Var_x x);
23ast::PinPtr Pinned(Var_f f);
24
25ast::ExistsPtr Exists(std::initializer_list<Var_id> id_list);
26ast::ForallPtr Forall(std::initializer_list<Var_id> id_list);
27
28ast::NotPtr Not(const Expr& arg);
29ast::AndPtr And(const std::vector<Expr>& args);
30ast::OrPtr Or(const std::vector<Expr>& args);
31ast::PreviousPtr Previous(const Expr& arg);
32ast::AlwaysPtr Always(const Expr& arg);
33ast::SometimesPtr Sometimes(const Expr& arg);
34ast::SincePtr Since(const Expr& a, const Expr& b);
35ast::BackToPtr BackTo(const Expr& a, const Expr& b);
36
37ast::AreaOf Area(Var_id id, double scale = 1.0);
38ast::SpArea Area(const ast::SpatialExpr& expr, double scale = 1.0);
39
40ast::SpExistsPtr SpExists(const ast::SpatialExpr&);
41ast::SpForallPtr SpForall(const ast::SpatialExpr&);
42ast::ComplementPtr Complement(const ast::SpatialExpr&);
43ast::IntersectPtr Intersect(const std::vector<ast::SpatialExpr>&);
44ast::UnionPtr Union(const std::vector<ast::SpatialExpr>&);
45ast::InteriorPtr Interior(const ast::SpatialExpr&);
46ast::ClosurePtr Closure(const ast::SpatialExpr&);
47
48ast::SpPreviousPtr SpPrevious(const ast::SpatialExpr&);
49
50ast::SpAlwaysPtr SpAlways(const ast::SpatialExpr&);
51ast::SpAlwaysPtr SpAlways(const FrameInterval&, const ast::SpatialExpr&);
52
53ast::SpSometimesPtr SpSometimes(const ast::SpatialExpr&);
54ast::SpSometimesPtr SpSometimes(const FrameInterval&, const ast::SpatialExpr&);
55
56ast::SpSincePtr SpSince(const ast::SpatialExpr&, const ast::SpatialExpr&);
57ast::SpSincePtr
58SpSince(const FrameInterval&, const ast::SpatialExpr&, const ast::SpatialExpr&);
59
60ast::SpBackToPtr SpBackTo(const ast::SpatialExpr&, const ast::SpatialExpr&);
61ast::SpBackToPtr
62SpBackTo(const FrameInterval&, const ast::SpatialExpr&, const ast::SpatialExpr&);
63
64} // namespace percemon
65
66#endif /* end of include guard: __PERCEMON_AST_HPP__ */