zongors-reality-engine/src/compiler.c

221 lines
4.2 KiB
C

#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;
}