This commit is contained in:
2017-02-06 12:14:05 +01:00
parent 209c869eeb
commit 19a2260644
9 changed files with 60 additions and 43 deletions

View File

@@ -346,9 +346,10 @@ static void parse_expr_mul() {
tkn_next();
parse_expr_atom();
switch (operat) {
case TOKEN_ASTERISC: emmit(OP_MUL); break;
case TOKEN_SLASH: emmit(OP_DIV); break;
case TOKEN_MOD: emmit(OP_MOD); break;
case TOKEN_ASTERISC: emmit(OP_MUL); break;
case TOKEN_SLASH: emmit(OP_DIV); break;
case TOKEN_MOD: emmit(OP_MOD); break;
default: /* Impossible */ break;
}
}
}
@@ -359,9 +360,10 @@ static void parse_expr_sum() {
tkn_next();
parse_expr_mul();
switch (operat) {
case TOKEN_PLUS: emmit(OP_ADD); break;
case TOKEN_MINUS: emmit(OP_SUB); break;
}
case TOKEN_PLUS: emmit(OP_ADD); break;
case TOKEN_MINUS: emmit(OP_SUB); break;
default: /* Impossible */ break;
}
}
}
static void parse_expr_bool() {
@@ -371,9 +373,10 @@ static void parse_expr_bool() {
tkn_next();
parse_expr_sum();
switch (operat) {
case TOKEN_AND: emmit(OP_AND); break;
case TOKEN_OR: emmit(OP_OR); break;
}
case TOKEN_AND: emmit(OP_AND); break;
case TOKEN_OR: emmit(OP_OR); break;
default: /* Impossible */ break;
}
}
}
static void parse_expression() {
@@ -383,12 +386,13 @@ static void parse_expression() {
tkn_next();
parse_expr_bool();
switch (operat) {
case TOKEN_EQ: emmit(OP_EQ); break;
case TOKEN_LT: emmit(OP_LT); break;
case TOKEN_GT: emmit(OP_GT); break;
case TOKEN_LEQ: emmit(OP_LEQ); break;
case TOKEN_GEQ: emmit(OP_GEQ); break;
}
case TOKEN_EQ: emmit(OP_EQ); break;
case TOKEN_LT: emmit(OP_LT); break;
case TOKEN_GT: emmit(OP_GT); break;
case TOKEN_LEQ: emmit(OP_LEQ); break;
case TOKEN_GEQ: emmit(OP_GEQ); break;
default: /* Impossible */ break;
}
}
}
@@ -409,7 +413,7 @@ static void parse_dim() {
strcpy(varname, tkn_get_string());
tkn_next(); EXPECT(TOKEN_LPAR, "Expected array size");
tkn_next(); EXPECT(TOKEN_NUMBER, "Expected integer constant as array size");
int ivar = get_variable_index(varname, tkn_get_value());
get_variable_index(varname, tkn_get_value()); // register variable with size, no need to keep ival
tkn_next(); EXPECT(TOKEN_RPAR, "Expected ')'");
tkn_next();
}
@@ -893,9 +897,15 @@ void parser_parse(const char* buffer, byte* mem) {
parse_statements();
append_strings();
FILE *f = fopen("test.bin", "wb");
fwrite(mem, codepos, 1, f);
fclose(f);
if (error_raised()) {
codepos = 0xA000;
emmit(OP_JMP);
emmit_w(0xA000);
}
//FILE *f = fopen("test.bin", "wb");
//fwrite(mem, codepos, 1, f);
//fclose(f);
//return code;
}