linc 0.7
Linc is a general-purpose programming language inspired by C
|
Class responsible for the parsing stage of compilation. Parses a list of tokens into AST nodes. More...
#include <Parser.hpp>
Classes | |
struct | Definition |
A symbol generic definition representation. More... | |
Public Types | |
using | TokenList = std::vector<Token> |
using | TokenSize = TokenList::size_type |
Public Member Functions | |
Parser () | |
Constructor: begin a scope and append all internal symbols as valid definitions. | |
Program | operator() () const |
Parse the current list of tokens as a program. | |
void | set (std::vector< Token > tokens, std::string_view filepath) |
Set the current list of tokens, as well as their corresponding filepath. | |
template<typename FUNC > | |
auto | parseNodeListClause (FUNC parse_function, Token::Type end_token_type=Token::Type::ParenthesisRight, Token::Type delimiter_type=Token::Type::Comma) const |
Parse the following tokens as a list of delimited types (or nothing if a 'terminating' token is found). | |
std::unique_ptr< const class MatchClause > | parseMatchClause () const |
Parse the following tokens as a match clause. | |
std::unique_ptr< const class EnumeratorClause > | parseEnumeratorClause () const |
Parse the following tokens as an enumerator clause. | |
std::optional< class LoopLabel > | parseLoopLabel () const |
Parse the following tokens as an optional loop identifier. | |
std::unique_ptr< const class Statement > | parseStatement () const |
Parse the following tokens as an AST statement. | |
std::unique_ptr< const class Declaration > | parseDeclaration () const |
Parse the following tokens as an AST declaration. | |
std::unique_ptr< const class Node > | parseVariant () const |
Parse the following tokens as an AST variant node (i.e. either a statement or an expression). | |
std::unique_ptr< const class VariableDeclaration > | parseVariableDeclaration () const |
Parse the following tokens as an AST variable declaration. | |
std::unique_ptr< const class DirectVariableDeclaration > | parseDirectVariableDeclaration () const |
Parse the following tokens as a direct variable declaration (implicit typing). | |
std::unique_ptr< const class FunctionDeclaration > | parseFunctionDeclaration () const |
Parse the following tokens as an AST function declaration. | |
std::unique_ptr< const class ExternalDeclaration > | parseExternalDeclaration () const |
Parse the following tokens as an AST external declaration. | |
std::unique_ptr< const class StructureDeclaration > | parseStructureDeclaration () const |
Parse the following tokens as an AST structure declaration. | |
std::unique_ptr< const class EnumerationDeclaration > | parseEnumerationDeclaration () const |
Parse the following tokens as an AST enumeration declaration. | |
std::unique_ptr< const class Expression > | parseModifierExpression () const |
Parse the following tokens as an AST modifier expression. | |
std::unique_ptr< const class Expression > | parseExpression (uint16_t parent_precedence=0) const |
Parse the following tokens as an AST expression. | |
std::unique_ptr< const class Expression > | parsePrimaryExpression () const |
Parse the following tokens as an AST primary expression. | |
std::unique_ptr< const class ArrayInitializerExpression > | parseArrayInitializerExpression () const |
Parse the following tokens as an AST array initializer expression. | |
std::unique_ptr< const class BlockExpression > | parseBlockExpression () const |
Parse the following tokens as an AST block expression. | |
std::unique_ptr< const class ParenthesisExpression > | parseParenthesisExpression () const |
Parse the following tokens as an AST parenthesis expression. | |
std::unique_ptr< const class IfExpression > | parseIfExpression () const |
Parse the following tokens as an AST if(/else) expression. | |
std::unique_ptr< const class ForExpression > | parseForExpression (class std::optional< LoopLabel > label) const |
Parse the following tokens as an AST for expression. | |
std::unique_ptr< const class WhileExpression > | parseWhileExpression (class std::optional< LoopLabel > label) const |
Parse the following tokens as an AST while(/else/finally) expression. | |
std::unique_ptr< const class MatchExpression > | parseMatchExpression () const |
Parse the following tokens as an AST match expression. | |
std::unique_ptr< const class ConversionExpression > | parseConversionExpression () const |
Parse the following tokens as an AST conversion expression. | |
std::unique_ptr< const class StructureInitializerExpression > | parseStructureInitializerExpression () const |
Parse the following tokens as an AST conversion expression. | |
std::unique_ptr< const class LiteralExpression > | parseLiteralExpression () const |
Parse the following tokens as an AST literal expression. | |
std::unique_ptr< const class IdentifierExpression > | parseIdentifierExpression (bool type_inclusive=false) const |
Parse the following tokens as an AST identifier expression. | |
std::unique_ptr< const class CallExpression > | parseCallExpression () const |
Parse the following tokens as an AST function call expression. | |
std::unique_ptr< const class EnumeratorExpression > | parseEnumeratorExpression () const |
Parse the following tokens as an AST namespace access expression. | |
std::unique_ptr< const class TypeExpression > | parseTypeExpression () const |
Parse the following tokens as an AST type expression. | |
auto | parseEndOfFile () const |
Require the next token to be an EOF token (used when appropriate). | |
Class responsible for the parsing stage of compilation. Parses a list of tokens into AST nodes.
Program linc::Parser::operator() | ( | ) | const |
Parse the current list of tokens as a program.
std::unique_ptr< const IdentifierExpression > linc::Parser::parseIdentifierExpression | ( | bool | type_inclusive = false | ) | const |
Parse the following tokens as an AST identifier expression.
type_inclusive | Treat type identifiers as valid. |