#include "compiler.h" #include "parser.h" #define MEMORY_SIZE 1024 Code *demo_add_compile() { Code *code = (Code *)malloc(sizeof(Code)); Value memory[MEMORY_SIZE] = {0}; /* Memory array */ code->memory = memory; code->size = MEMORY_SIZE; code->current.pc = 1; uint32_t i = 1; memory[0].c[0] = 0; memory[0].c[1] = 'z'; memory[0].c[2] = 'r'; memory[0].c[3] = 'e'; memory[i++].u = OP(OP_LOADU, 0, 0, 0); memory[i++].u = 0; memory[i++].u = OP(OP_LOADU, 1, 0, 0); memory[i++].u = 5; memory[i++].u = OP(OP_LOADU, 2, 0, 0); memory[i++].u = 1; memory[i++].u = OP(OP_LOADF, 3, 0, 0); memory[i++].f = 5.0f; memory[i++].u = OP(OP_LOADF, 4, 0, 0); memory[i++].f = 5.0f; memory[i++].u = OP(OP_LOADU, 5, 0, 0); memory[i++].u = 200; memory[i++].u = OP(OP_LOADU, 6, 0, 0); memory[i++].u = 250; memory[i++].u = OP(OP_LOADU, 7, 0, 0); memory[i++].u = 252; uint32_t jmp = i; memory[i++].u = OP(OP_ADD_REAL, 4, 4, 3); memory[i++].u = OP(OP_SUB_UINT, 1, 1, 2); memory[i++].u = OP(OP_JGT_UINT, jmp, 1, 0); memory[i++].u = OP(OP_REAL_TO_STRING, 5, 4, 0); memory[i++].u = OP(OP_PRINT_STRING, 0, 5, 0); memory[i++].u = OP(OP_REAL_TO_UINT, 1, 4, 4); memory[i++].u = OP(OP_UINT_TO_STRING, 6, 1, 0); memory[i++].u = OP(OP_PRINT_STRING, 0, 6, 0); memory[i++].u = OP(OP_READ_STRING, 7, 0, 0); memory[i++].u = OP(OP_PRINT_STRING, 0, 7, 0); memory[i++].u = OP(OP_HALT, 0, 0, 0); return code; } Code *compile(char *buffer) { Code *code = (Code *)malloc(sizeof(Code)); Value memory[MEMORY_SIZE] = {0}; /* Memory array */ code->memory = memory; code->size = MEMORY_SIZE; /* char number[100]; */ memory[0].c[0] = 0; memory[0].c[1] = 'z'; memory[0].c[2] = 'r'; memory[0].c[3] = 'e'; initTokenizer(buffer); Token t = nextToken(); do { debug_printToken(t); switch (t.type) { case TOKEN_LEFT_PAREN: break; case TOKEN_RIGHT_PAREN: break; case TOKEN_LEFT_BRACE: break; case TOKEN_RIGHT_BRACE: break; case TOKEN_SEMICOLON: break; case TOKEN_IDENTIFIER: break; case TOKEN_STRING: break; case TOKEN_FLOAT: break; case TOKEN_U8: break; case TOKEN_I8: break; case TOKEN_U16: break; case TOKEN_I16: break; case TOKEN_U64: break; case TOKEN_I64: break; case TOKEN_INT: break; case TOKEN_UINT: break; case TOKEN_FALSE: break; case TOKEN_TRUE: break; case TOKEN_NULL: break; case TOKEN_EOF: break; case TOKEN_ERROR: break; case TOKEN_ADD: break; case TOKEN_SUB: break; case TOKEN_MUL: break; case TOKEN_DIV: break; case TOKEN_MOD: break; case TOKEN_GT: break; case TOKEN_LT: break; case TOKEN_EQ: break; case TOKEN_GE: break; case TOKEN_LE: break; case TOKEN_NE: break; case TOKEN_AND: break; case TOKEN_OR: break; case TOKEN_XOR: break; case TOKEN_SHIFTRIGHT: break; case TOKEN_SHIFTLEFT: break; case TOKEN_FN: break; case TOKEN_TO: break; case TOKEN_IN: break; case TOKEN_IS: break; case TOKEN_AS: break; case TOKEN_USE: break; case TOKEN_IF: break; case TOKEN_ELSE: break; case TOKEN_DEFAULT: break; case TOKEN_FOR: break; case TOKEN_TRY: break; case TOKEN_CATCH: break; case TOKEN_WHILE: break; case TOKEN_DO: break; case TOKEN_EXIT: break; case TOKEN_SWITCH: break; case TOKEN_RETURN: break; case TOKEN_CONST: break; case TOKEN_TYPE: break; case TOKEN_THIS: break; case TOKEN_YIELD: break; case TOKEN_CASE: break; case TOKEN_ASSERT: break; case TOKEN_BREAK: break; case TOKEN_LET: break; case TOKEN_PRINT: break; default: break; } t = nextToken(); } while (t.type != TOKEN_EOF); return code; }