File AST.h

File List > ast > AST.h

Go to the documentation of this file

#ifndef RESTRICTED_NL_AST_H
#define RESTRICTED_NL_AST_H

#include <utility>
#include<vector>
#include<string>
#include<sstream>

using namespace std;

class ASTVisitor;

class ActionNode {
public:
    ActionNode() = default;
    virtual string accept(ASTVisitor& visitor) const = 0;
};

class VisitNode : public ActionNode {
private:
    string url;
public:
    explicit VisitNode(string&& url);
    string accept(ASTVisitor& visitor) const override;
    string get_url() const {
        return url;
    }
};

class ClickNode : public ActionNode {
private:
    string element_type;
    string description;
public:
    explicit ClickNode(string&& element_type, string&& description);
    string accept(ASTVisitor& visitor) const override;
    string get_element_type() const;
    string get_description() const;
};

class TypeNode : public ActionNode {
    string content;
    string element_type;
    string description;
public:
    explicit TypeNode(string&& content, string&& element_type, string&& description);
    string accept(ASTVisitor& visitor) const override;
    string get_content() const;
    string get_element_type() const;
    string get_description() const;
};

class CheckNode : public ActionNode {
private:
    string element_type;
    string description;
    bool state;
public:
    explicit CheckNode(string&& element_type, string&& description, bool state);
    string accept(ASTVisitor& visitor) const override;
    string get_element_type() const;
    string get_description() const;
    bool get_state() const;
};

class TestNode {
public:
    string testName;
    vector<ActionNode*> actions;
    string accept(ASTVisitor& visitor) const;
    explicit TestNode(string&& testName, vector<ActionNode*> actions);
};

class AST {
public:
    vector<TestNode> tests;
    string accept(ASTVisitor& visitor) const;
    explicit AST(vector<TestNode> tests);
    explicit AST();
};

class ASTVisitor {
public:
    virtual string visit(const VisitNode& node)  = 0;
    virtual string visit(const ClickNode& node)  = 0;
    virtual string visit(const TypeNode& node)  = 0;
    virtual string visit(const CheckNode& node)  = 0;
    virtual string visit(const TestNode& node)  = 0;
    virtual string visit(const AST& tree)  = 0;
};

#endif //RESTRICTED_NL_AST_H