1 #ifndef MSP_GL_PROGRAMPARSER_H_
2 #define MSP_GL_PROGRAMPARSER_H_
7 #include <msp/io/base.h>
8 #include "programsyntax.h"
17 std::string::const_iterator iter;
18 std::deque<std::string> next_tokens;
19 ProgramSyntax::Module main_module;
20 ProgramSyntax::Module *cur_module;
23 ProgramSyntax::Module &parse(const std::string &);
24 ProgramSyntax::Module &parse(IO::Base &);
27 void parse_source(ProgramSyntax::Module &);
29 const std::string &peek_token(unsigned = 0);
30 std::string parse_token();
31 std::string parse_token_();
32 std::string parse_identifier();
33 std::string parse_number();
34 std::string parse_other();
35 bool skip_comment_and_whitespace();
36 void expect(const std::string &);
37 std::string expect_type();
38 std::string expect_identifier();
39 bool check(const std::string &);
41 static bool is_interface_qualifier(const std::string &);
42 static bool is_sampling_qualifier(const std::string &);
43 static bool is_qualifier(const std::string &);
44 static bool is_builtin_type(const std::string &);
45 bool is_type(const std::string &);
47 ProgramSyntax::Node *parse_global_declaration();
48 ProgramSyntax::Node *parse_statement();
49 ProgramSyntax::Layout *parse_layout();
50 void parse_block(ProgramSyntax::Block &, bool);
51 void parse_expression(ProgramSyntax::Expression &);
52 ProgramSyntax::StructDeclaration *parse_struct_declaration();
53 ProgramSyntax::VariableDeclaration *parse_variable_declaration();
54 ProgramSyntax::FunctionDeclaration *parse_function_declaration();
55 void parse_function_parameter_list(ProgramSyntax::FunctionDeclaration &);
56 ProgramSyntax::InterfaceBlock *parse_interface_block();
57 ProgramSyntax::Conditional *parse_conditional();
58 ProgramSyntax::Iteration *parse_iteration();
59 ProgramSyntax::Return *parse_return();