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 explicit 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 const &literal);
47 bool isTokenAValue() const;
48 void displayCurrentToken() const;
49 static void addDirective(ConfigNode &node, ParsedDirectivePair const &pair);
50 void pushTokenTo(ParsedDirectiveArgs &args) const;
51
52 void handleServerBlock();
53 void handleStatement();
56};
57
58} // namespace config
A generic node representing a block in the configuration file.
Definition ConfigNode.hpp:15
bool isTokenAValue() const
Definition Parser.cpp:59
void handleStatement()
Definition Parser.cpp:76
void handleServerBlock()
Definition Parser.cpp:65
Token const & currentToken() const
Definition Parser.cpp:18
static std::vector< ConfigNode > parse(TokenArray const &)
Definition Parser.cpp:10
static void addDirective(ConfigNode &node, ParsedDirectivePair const &pair)
Definition Parser.cpp:47
void consumeToken()
Definition Parser.cpp:30
void expectToken(TokenType type)
Definition Parser.cpp:35
Token const & peekToken() const
Definition Parser.cpp:24
size_t pos_
Definition Parser.hpp:36
TokenArray const & tokens_
Definition Parser.hpp:35
size_t size() const
Definition Parser.cpp:16
std::vector< ConfigNode > nodes_
Definition Parser.hpp:34
ParsedDirectivePair handleDirective()
Definition Parser.cpp:104
void handleLocationBlock()
Definition Parser.cpp:83
void displayCurrentToken() const
void pushTokenTo(ParsedDirectiveArgs &args) const
Definition Parser.cpp:120
Definition ArgumentFactory.hpp:5
std::vector< Token > ParsedDirectiveArgs
Definition types.hpp:13
std::vector< Token > TokenArray
Definition Lexer.hpp:8
std::pair< std::string, ParsedDirectiveArgs > ParsedDirectivePair
Definition types.hpp:15
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