Webserv
Loading...
Searching...
No Matches
Parser.hpp
Go to the documentation of this file.
1#pragma once
2
4#include "Lexer.hpp"
5
6/* GRAMMAR in EBNF
7 * config_file = { server_block } ;
8 * server_block = "server" "{" { statement } "}" ;
9 * statement = directive | location_block ;
10 * directive = IDENTIFIER { parameter } ";" ;
11 * location_block = "location" IDENTIFIER "{" { directive } "}" ;
12 * parameter = IDENTIFIER | STRING | NUMBER ;
13 */
14
15namespace config {
16
29class Parser {
30public:
31 static std::vector<ConfigNode> parse(TokenArray const &);
32
33private:
34 std::vector<ConfigNode> nodes_;
36 size_t pos_;
37
39 Parser(TokenArray const &);
40 size_t size() const;
41
42 Token const &currentToken() const;
43 Token const &peekToken() const;
44 void consumeToken();
45 void expectToken(TokenType type);
46 void expectToken(std::string literal);
47 bool isTokenAValue() const;
48 void displayCurrentToken() const;
49 void addDirective(ConfigNode &node, DirectivePair const &pair) const;
50
51 void handleServerBlock();
52 void handleStatement();
55};
56
57} // namespace config
A generic node representing a block in the configuration file.
Definition ConfigNode.hpp:24
bool isTokenAValue() const
Definition Parser.cpp:62
void addDirective(ConfigNode &node, DirectivePair const &pair) const
Definition Parser.cpp:50
void handleStatement()
Definition Parser.cpp:79
void handleServerBlock()
Definition Parser.cpp:68
Token const & currentToken() const
Definition Parser.cpp:21
static std::vector< ConfigNode > parse(TokenArray const &)
Definition Parser.cpp:11
void consumeToken()
Definition Parser.cpp:33
DirectivePair handleDirective()
Definition Parser.cpp:104
void expectToken(TokenType type)
Definition Parser.cpp:38
Token const & peekToken() const
Definition Parser.cpp:27
size_t pos_
Definition Parser.hpp:36
TokenArray const & tokens_
Definition Parser.hpp:35
size_t size() const
Definition Parser.cpp:17
std::vector< ConfigNode > nodes_
Definition Parser.hpp:34
void handleLocationBlock()
Definition Parser.cpp:86
void displayCurrentToken() const
Definition ConfigException.hpp:6
std::vector< Token > TokenArray
Definition Lexer.hpp:8
std::pair< std::string, DirectiveArgs > DirectivePair
Definition ConfigNode.hpp:13
TokenType
Represents the type of a lexical token.
Definition Token.hpp:12
Represents a single lexical token with a type and a literal value.
Definition Token.hpp:28