1 #ifndef MSP_GL_PROGRAMSYNTAX_H_
2 #define MSP_GL_PROGRAMSYNTAX_H_
10 namespace ProgramSyntax {
18 virtual void visit(NodeVisitor &) = 0;
23 std::vector<Node *> body;
29 virtual void visit(NodeVisitor &);
34 std::vector<std::string> tokens;
36 bool empty() const { return tokens.empty(); }
39 struct ExpressionStatement: Node
41 Expression expression;
43 virtual void visit(NodeVisitor &);
50 std::string identifier;
54 std::vector<Qualifier> qualifiers;
55 std::string interface;
57 virtual void visit(NodeVisitor &);
60 struct StructDeclaration: Node
67 virtual void visit(NodeVisitor &);
70 struct VariableDeclaration: Node
74 std::string interface;
78 Expression array_size;
79 Expression init_expression;
81 VariableDeclaration();
83 virtual void visit(NodeVisitor &);
86 struct InterfaceBlock: Node
88 std::string interface;
94 virtual void visit(NodeVisitor &);
97 struct FunctionDeclaration: Node
99 std::string return_type;
101 std::vector<VariableDeclaration *> parameters;
105 FunctionDeclaration();
106 ~FunctionDeclaration();
108 virtual void visit(NodeVisitor &);
111 struct Conditional: Node
113 Expression condition;
117 virtual void visit(NodeVisitor &);
120 struct Iteration: Node
122 Node *init_statement;
123 Expression condition;
124 Expression loop_expression;
128 virtual ~Iteration();
130 virtual void visit(NodeVisitor &);
135 Expression expression;
137 virtual void visit(NodeVisitor &);
142 virtual ~NodeVisitor() { }
144 virtual void visit(Block &) { }
145 virtual void visit(ExpressionStatement &) { }
146 virtual void visit(Layout &) { }
147 virtual void visit(StructDeclaration &) { }
148 virtual void visit(VariableDeclaration &) { }
149 virtual void visit(InterfaceBlock &) { }
150 virtual void visit(FunctionDeclaration &) { }
151 virtual void visit(Conditional &) { }
152 virtual void visit(Iteration &) { }
153 virtual void visit(Return &) { }
168 ProgramSyntax::Block content;
170 Context(ContextType);
175 Context global_context;
176 Context vertex_context;
177 Context geometry_context;
178 Context fragment_context;
179 std::map<std::string, StructDeclaration *> structs;
184 } // namespace ProgramSyntax