#include "compiler.h" #include "parser.h" #define MEMORY_SIZE 1024 Code *demo_add_compile() { Code *code = (Code *)malloc(sizeof(Code)); Word memory[MEMORY_SIZE] = {0}; /* Memory array */ code->memory = memory; code->size = MEMORY_SIZE; int 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_ADD_REAL; memory[i++].u = 102; memory[i++].u = 103; memory[i++].u = 103; memory[i++].u = OP_SUB_UINT; memory[i++].u = 100; memory[i++].u = 101; memory[i++].u = 100; memory[i++].u = OP_JGT_UINT; memory[i++].u = 100; memory[i++].u = 99; memory[i++].u = 1; memory[i++].u = OP_REAL_TO_STRING; memory[i++].u = 103; memory[i++].u = 1; memory[i++].u = 200; memory[i++].u = OP_PRINT_STRING; memory[i++].u = 201; memory[i++].u = 1; memory[i++].u = 1; memory[i++].u = OP_REAL_TO_UINT; memory[i++].u = 103; memory[i++].u = 1; memory[i++].u = 103; memory[i++].u = OP_UINT_TO_STRING; memory[i++].u = 103; memory[i++].u = 1; memory[i++].u = 104; memory[i++].u = OP_PRINT_STRING; memory[i++].u = 105; memory[i++].u = 1; memory[i++].u = 1; memory[i++].u = OP_READ_STRING; memory[i++].u = 1; memory[i++].u = 1; memory[i++].u = 109; memory[i++].u = OP_PRINT_STRING; memory[i++].u = 110; memory[i++].u = 1; memory[i++].u = 1; memory[i++].u = OP_HALT; memory[i++].u = 0; memory[i++].u = 0; memory[i++].u = 0; memory[99].u = 0; memory[100].u = 5; memory[101].u = 1; memory[102].f = 5.0f; memory[103].f = 5.0f; return code; } Code *compile(char *buffer) { Code *code = (Code *)malloc(sizeof(Code)); Word 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; }