calc-tb/calc.h
2025-03-13 12:32:17 +01:00

63 lines
1.1 KiB
C

#pragma once
#include <stdbool.h>
#include <stddef.h>
typedef enum {
ET_Add,
ET_Subtract,
ET_Multiply,
ET_Divide,
ET_Int,
} ExprType;
typedef struct Expr Expr;
struct Expr {
ExprType type;
int int_value;
struct {
Expr* left;
Expr* right;
};
};
Expr* exprNew(Expr expr);
Expr* intExprNew(int int_value);
Expr* binaryExprNew(ExprType type, Expr* left, Expr* right);
void exprFree(Expr* expr);
int exprEval(const Expr* expr);
void exprPrint(const Expr* expr);
char binarySymbol(ExprType type);
typedef enum {
TT_Plus = '+',
TT_Minus = '-',
TT_Asterisk = '*',
TT_Slash = '/',
TT_Int = '0',
} TokenType;
typedef struct {
TokenType type;
int value;
} Token;
typedef struct {
Token* tokens;
size_t tokens_size;
size_t i;
} Parser;
size_t lex(Token* tokens, size_t tokens_max_size, const char* text);
bool parserDone(const Parser* parser);
void parserStep(Parser* parser);
Token parserCurrent(const Parser* parser);
void parserConstruct(Parser* parser, Token* tokens, size_t tokens_size);
Expr* parseExpr(Parser* parser);