hoshi-lang dev
Yet another programming language
Loading...
Searching...
No Matches
parser.cpp File Reference
#include "compiler/compilerContext.h"
#include "compiler/frontend/lexer.hpp"
#include "compiler/ir/IR.h"
#include "share/def.hpp"
#include <cstdint>
#include "parser.hpp"
Include dependency graph for parser.cpp:

Go to the source code of this file.

Namespaces

namespace  yoi
 

Macros

#define PARSE_BINARY_EXPR(NODE_TYPE, CHILD_TYPE, OPERATORS, ERROR_MSG)
 

Functions

template<typename T >
void finalizeAST_vec (yoi::vec< T * > &vec)
 
void parse (yoi::basicLiterals *&o, yoi::lexer &lex)
 
void parse (identifier *&o, lexer &lex)
 
void parse (identifierWithTypeSpec *&o, lexer &lex)
 
void parse (defTemplateArgSpec *&o, lexer &lex)
 
void parse (defTemplateArg *&o, lexer &lex)
 
void parse (templateArgSpec *&o, lexer &lex)
 
void parse (templateArg *&o, lexer &lex)
 
void parse (invocationArguments *&o, lexer &lex)
 
void parse (definitionArguments *&o, lexer &lex)
 
void parse (funcTypeSpec *&o, lexer &lex)
 
void parse (typeSpec *&o, lexer &lex)
 
void parse (subscript *&o, lexer &lex)
 
void parse (identifierWithTemplateArg *&o, lexer &lex)
 
void parse (identifierWithDefTemplateArg *&o, lexer &lex)
 
void parse (externModuleAccessExpression *&o, lexer &lex)
 
void parse (subscriptExpr *&o, lexer &lex)
 
void parse (memberExpr *&o, lexer &lex)
 
void parse (newExpression *&o, lexer &lex)
 
void parse (primary *&o, lexer &lex)
 
void parse (uniqueExpr *&o, lexer &lex)
 
void parse (leftExpr *&o, lexer &lex)
 
 PARSE_BINARY_EXPR (mulExpr, leftExpr,(lex.curToken.kind==lexer::token::tokenKind::asterisk||lex.curToken.kind==lexer::token::tokenKind::slash||lex.curToken.kind==lexer::token::tokenKind::percentSign), "expected uniqueExpr after operators while parsing mulExpr") PARSE_BINARY_EXPR(addExpr
 

Variables

 mulExpr
 

Macro Definition Documentation

◆ PARSE_BINARY_EXPR

#define PARSE_BINARY_EXPR (   NODE_TYPE,
  CHILD_TYPE,
  OPERATORS,
  ERROR_MSG 
)
Value:
void parse(NODE_TYPE *&o, lexer &lex) { \
CHILD_TYPE *a = nullptr; \
lexer::token node_start_token = lex.curToken; \
\
parse(a, lex); \
if (a) { \
vecA.push_back(a); \
while \
OPERATORS { \
vecB.push_back(lex.curToken); \
lex.scan(); \
a = nullptr; \
parse(a, lex); \
if (!a) { \
finalizeAST_vec(vecA); \
panic(lex.line, lex.col, ERROR_MSG); \
o = nullptr; \
return; \
} \
vecA.push_back(a); \
} \
o = new NODE_TYPE{node_start_token, vecA, vecB}; \
} else { \
o = nullptr; \
} \
}
std::vector< t > vec
Definition def.hpp:53

Definition at line 773 of file parser.cpp.