Files
cground/src/interpreter.h

54 lines
1.2 KiB
C
Raw Normal View History

2025-11-23 18:34:30 +11:00
#ifndef INTERPRETER_H
#define INTERPRETER_H
2025-11-23 19:18:10 +11:00
#define MAX_ID_LEN 64
2025-11-23 18:34:30 +11:00
#include "types.h"
#include "parser.h"
#include "include/uthash.h"
typedef enum GroundRuntimeError {
2025-12-02 09:00:21 +11:00
ARG_TYPE_MISMATCH, TOO_FEW_ARGS, TOO_MANY_ARGS, UNKNOWN_LABEL, UNKNOWN_VARIABLE, LIST_ERROR, STRING_ERROR, MATH_ERROR, FIXME
2025-11-23 18:34:30 +11:00
} GroundRuntimeError;
typedef struct GroundLabel {
2025-11-23 19:18:10 +11:00
char id[MAX_ID_LEN];
int lineNum;
UT_hash_handle hh;
2025-11-23 18:34:30 +11:00
} GroundLabel;
2025-11-23 19:59:22 +11:00
typedef struct GroundVariable {
char id[MAX_ID_LEN];
GroundValue value;
UT_hash_handle hh;
} GroundVariable;
2025-12-02 09:00:21 +11:00
typedef struct GroundFunctionArgs {
GroundValueType type;
char* name;
} GroundFunctionArgs;
typedef struct GroundFunction {
GroundFunctionArgs* args;
size_t argSize;
GroundValueType returnType;
GroundProgram program;
} GroundFunction;
typedef struct GroundFunctionWrapper {
char id[MAX_ID_LEN];
GroundFunction function;
UT_hash_handle hh;
} GroundFunctionWrapper;
2025-11-23 19:59:22 +11:00
typedef struct GroundScope {
GroundLabel** labels;
GroundVariable** variables;
2025-12-02 09:00:21 +11:00
GroundFunctionWrapper** functions;
2025-11-23 19:59:22 +11:00
} GroundScope;
2025-12-02 09:00:21 +11:00
GroundValue interpretGroundProgram(GroundProgram* in, GroundScope* inScope);
GroundValue interpretGroundInstruction(GroundInstruction inst, GroundScope* scope);
2025-11-24 10:15:53 +11:00
2025-11-23 18:34:30 +11:00
#endif