Parser#

namespace stapl
namespace parsing

Classes and types related to parsing.

class Parser#
#include <parser.h>

Parser for stapl.

This is a combination of Recursive Descent Parsing and Operator-Precedence Parsing.

Public Functions

Parser(std::string code)#

Constructor for parser.

Parameters:

code – Code string to be parsed.

ast::LiteralExprNode<int> parse_int()#

Parse integer literals.

Returns:

A parsed integer literal.

ast::LiteralExprNode<double> parse_float()#

Parse floating-point literals.

Returns:

A parsed float literal.

ast::LiteralExprNode<bool> parse_bool()#

Parse boolean literals.

Returns:

A parsed boolean literal.

ast::ExprNode parse_expr()#

Parse expression and create an ExprNode.

Returns:

A parsed expression.

ast::ExprNode parse_paren_expr()#

Parse an expression inside a paren.

Returns:

A parsed expression in parens.

ast::ExprNode parse_primary()#

Parse primary, which is one of identifier, literal and paren expression.

Returns:

A parsed primary node.

ast::ExprNode parse_unary_expr()#

Parse an unary expression.

Returns:

A parsed unary expression node.

ast::ExprNode parse_binop_rhs(int prec, ast::ExprNode lhs)#

Parse a binary operator and rhs.

Parameters:
  • prec – Precedence of the operator.

  • lhs – LHS of the operator.

Returns:

A parsed binary expression node.

std::vector<ast::ExprNode> parse_call_arg_list()#

Parse argument list in function call.

Returns:

A parsed argument list.

ast::ExprNode parse_identifier_or_func_call()#

Parse identifier or a function call.

Returns:

A parsed expression, which is either an identifier or a function call.

ast::StmtNode parse_stmt()#

Parse a statement.

Returns:

A parsed statement.

ast::StmtNode parse_let()#

Parse a let statement.

Returns:

A parsed let statement.

ast::StmtNode parse_assign_or_call()#

Parse an assignment statement or function call.

Returns:

A parsed statement node of assignment statement or function call.

ast::StmtNode parse_if()#

Parse an if statement.

Returns:

A parsed if statement.

ast::StmtNode parse_while()#

Parse a while statement.

Returns:

A parsed while statement.

ast::StmtNode parse_break()#

Parse a break statement.

Returns:

A parsed break statement.

ast::StmtNode parse_continue()#

Parse a continue statement.

Returns:

A parsed continue statement.

ast::StmtNode parse_return()#

Parse a return statement.

Returns:

A parsed return statement.

ast::StmtNode parse_compound()#

Parse a compound statement.

Returns:

A parsed compound statement.

ast::PrototypeNode parse_proto()#

Parse a function prototype.

Returns:

A parsed function prototype.

ast::FunctionDeclNode parse_def()#

Parse a def statement.

Returns:

A parsed def statement.

ast::FunctionDeclNode parse_extern()#

Parse an extern function.

Returns:

A parsed extern function.

std::vector<ast::DeclNode> parse_all()#

Parse all declarations.

Returns:

A vector of parsed declarations.

ast::Module parse_module()#

Parse a module.

Returns:

A parsed Module object containing all declarations.

Private Functions

Token next_token()#

Get token from lexer and update current_token.

int get_prec()#

Get precedence of current_token.

Returns:

Precedence of current_token.

Private Members

Lexer lexer#

Lexer object for getting tokens.

Token current_token#

Currently parsing token.

std::map<std::string, int> binop_prec = {{"<", 10}, {"<=", 10}, {">", 10}, {">=", 10}, {"==", 10}, {"!=", 10}, {"+", 20}, {"-", 20}, {"*", 40}, {"/", 40}, {"%", 40}}#

Precedence table for binary operators.

std::set<std::string> unary_ops = {"+", "-", "!"}#

Set of unary operators.