|
Luma 0.1.0
A low-level compiled alternative to C, C++, and more!
|
Expression parsing implementation for the programming language compiler. More...
#include <stdalign.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "parser.h"
Functions | |
| Expr * | primary (Parser *parser) |
| Expr * | unary (Parser *parser) |
| Expr * | grouping (Parser *parser) |
| Expr * | binary (Parser *parser, Expr *left, BindingPower bp) |
| Expr * | call_expr (Parser *parser, Expr *left, BindingPower bp) |
| Expr * | assign_expr (Parser *parser, Expr *left, BindingPower bp) |
| Expr * | prefix_expr (Parser *parser, Expr *left, BindingPower bp) |
| Expr * | array_expr (Parser *parser) |
| Expr * | struct_expr (Parser *parser) |
| Expr * | named_struct_expr (Parser *parser, Expr *left, BindingPower bp) |
| Expr * | deref_expr (Parser *parser) |
| Expr * | addr_expr (Parser *parser) |
| Expr * | alloc_expr (Parser *parser) |
| Expr * | free_expr (Parser *parser) |
| Expr * | cast_expr (Parser *parser) |
| Expr * | input_expr (Parser *parser) |
| Expr * | system_expr (Parser *parser) |
| Expr * | syscall_expr (Parser *parser) |
| Expr * | sizeof_expr (Parser *parser) |
Expression parsing implementation for the programming language compiler.
This file contains implementations for parsing all types of expressions in the programming language. It works in conjunction with the Pratt parser implementation in parser.c to handle operator precedence and associativity correctly.
The expression parser handles:
All parsing functions follow the Pratt parser pattern, where expressions are built recursively based on operator precedence (binding power). The functions correspond to null denotation (nud) and left denotation (led) operations.
| Expr * assign_expr | ( | Parser * | parser, |
| Expr * | left, | ||
| BindingPower | bp | ||
| ) |
| Expr * binary | ( | Parser * | parser, |
| Expr * | left, | ||
| BindingPower | bp | ||
| ) |
| Expr * call_expr | ( | Parser * | parser, |
| Expr * | left, | ||
| BindingPower | bp | ||
| ) |
| Expr * named_struct_expr | ( | Parser * | parser, |
| Expr * | left, | ||
| BindingPower | bp | ||
| ) |
| Expr * prefix_expr | ( | Parser * | parser, |
| Expr * | left, | ||
| BindingPower | bp | ||
| ) |