summaryrefslogtreecommitdiff
path: root/src/include/parser.hpp
blob: 1399943ac20cded5a2e0bde6e5914909ed682f6b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/* Grammar
 * Expression --> Term PrimeExpression
 * PrimeExpression --> (+|-)Expression | Null
 * Term --> Factor PrimeTerm
 * PrimeTerm --> (*|/)Term | Null
 * Factor --> -Expression | (Expression) | operand */
#pragma once
#include <string>
#include "tokenizer.hpp"
#include "syntax_tree.hpp"


class Parser {
private:
  // Private attributes.
  Tokenizer tokenizer = Tokenizer();
  Token **tokens;
  Token *current_token;
  // End of private attributes.
  // Private methods.
  void parseExpression();
  void parsePrimeExpression();
  void parseTerm();
  void parsePrimeTerm();
  void parseFactor();
  // End of private methods.
public:
  Parser();
  const SyntaxTree *parse(const std::string &input);
};