template-project-cpp
Loading...
Searching...
No Matches
tpcpp::Parser Class Reference

The tpcpp parser. More...

#include <parsing/Parser.hpp>

Collaboration diagram for tpcpp::Parser:
[legend]

Classes

class  ParseException
 Exception thrown when a parsing error occurs. More...
 

Public Member Functions

ListOfExprs parse ()
 Parse input tokens into expressions.
 

Private Member Functions

Expr expression ()
 Implement expression -> assignment
 
Expr assignment ()
 Implement assignment -> IDENTIFIER "=" assignment | logic_or
 
Expr logicOr ()
 Implemet logic_or -> logic_and ( "|" logic_and )*
 
Expr logicAnd ()
 Implemet logic_and -> equality ( "&" equality )*
 
Expr equality ()
 Implement equality -> comparison ( ( "!=" | "==" ) comparison )*
 
Expr comparison ()
 Implement comparison -> term ( ( ">" | ">=" | "<" | "<=" ) term )*
 
Expr term ()
 Implemet term -> factor ( ( "+" | "-" ) factor )*
 
Expr factor ()
 Implement factor -> exponent ( ( "*" | "/" ) exponent )*
 
Expr exponent ()
 Implemet exponent -> unary ( "^" unary )?
 
Expr unary ()
 Implement unary -> ( "!" | "-" ) unary | call
 
Expr call ()
 Implement call -> primary ( "(" arguments? ")" )*
 
Expr finishCall (const Expr &callee)
 Implement arguments -> expression ( "," expression )*
 
Expr primary ()
 

Detailed Description

The tpcpp parser.

This is a recursive-descendent parser.

Here's the grammar:

program -> expression
assignment -> IDENTIFIER "=" assignment | logic_or
logic_or -> logic_and ( "|" logic_and )*
logic_and -> equality ( "&" equality )*
equality -> comparison ( ( "!=" | "==" ) comparison )*
comparison -> term ( ( ">" | ">=" | "<" | "<=" ) term )*
term -> factor ( ( "+" | "-" ) factor )*
factor -> exponent ( ( "*" | "/" ) exponent )*
exponent -> unary ( "^" unary )*
unary -> ( "!" | "-" )? unary | call
call -> primary ( "(" arguments? ")" )*
arguments -> expression ( "," expression )*
primary -> INTEGER | FLOAT | "true" | "false"
| "(" expression ")"
| IDENTIFIER
Expr assignment()
Implement assignment -> IDENTIFIER "=" assignment | logic_or
Definition Parser.cpp:41
Expr unary()
Implement unary -> ( "!" | "-" ) unary | call
Definition Parser.cpp:176
Expr comparison()
Implement comparison -> term ( ( ">" | ">=" | "<" | "<=" ) term )*
Definition Parser.cpp:110
Expr call()
Implement call -> primary ( "(" arguments? ")" )*
Definition Parser.cpp:187
Expr exponent()
Implemet exponent -> unary ( "^" unary )?
Definition Parser.cpp:163
Expr expression()
Implement expression -> assignment
Definition Parser.cpp:38
Expr equality()
Implement equality -> comparison ( ( "!=" | "==" ) comparison )*
Definition Parser.cpp:86
Expr term()
Implemet term -> factor ( ( "+" | "-" ) factor )*
Definition Parser.cpp:137
Expr factor()
Implement factor -> exponent ( ( "*" | "/" ) exponent )*
Definition Parser.cpp:150
Expr primary()
Definition Parser.cpp:220
Note
Top-most rule has the lowest priority.
Remarks
Left-associative rules do not contain a reference to themselves.
In recursive-descent, right-associative rules do reference themselves.
In tpcpp, assignment is an expression, instead of a statement. assignment is also right-associative.

Definition at line 54 of file Parser.hpp.

Member Function Documentation

◆ primary()

Expr tpcpp::Parser::primary ( )
private

Implement:

primary -> INTEGER | FLOAT | "true" | "false" |
| "(" expression ")"
| IDENTIFIER

Definition at line 220 of file Parser.cpp.


The documentation for this class was generated from the following files: