221 lines
4.2 KiB
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;
|
|
}
|