Started work on preprocessing jump addresses
This commit is contained in:
13
asm/lexer.c
13
asm/lexer.c
@@ -24,6 +24,8 @@ const char *token_type_as_cstr(token_type_t type)
|
|||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
case TOKEN_STAR:
|
||||||
|
return "STAR";
|
||||||
case TOKEN_LITERAL_NUMBER:
|
case TOKEN_LITERAL_NUMBER:
|
||||||
return "LITERAL_NUMBER";
|
return "LITERAL_NUMBER";
|
||||||
case TOKEN_LITERAL_CHAR:
|
case TOKEN_LITERAL_CHAR:
|
||||||
@@ -124,7 +126,7 @@ char uppercase(char c)
|
|||||||
|
|
||||||
bool is_symbol(char c)
|
bool is_symbol(char c)
|
||||||
{
|
{
|
||||||
return isalpha(c) || c == '-' || c == '_' || c == '.';
|
return isalpha(c) || c == '-' || c == '_' || c == '.' || c == ':';
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_valid_hex_char(char c)
|
bool is_valid_hex_char(char c)
|
||||||
@@ -431,6 +433,15 @@ lerr_t tokenise_buffer(buffer_t *buffer, token_stream_t *tokens_ptr)
|
|||||||
++buffer->used;
|
++buffer->used;
|
||||||
is_token = false;
|
is_token = false;
|
||||||
}
|
}
|
||||||
|
else if (c == '*')
|
||||||
|
{
|
||||||
|
t = (token_t){.type = TOKEN_STAR,
|
||||||
|
.column = column,
|
||||||
|
.str = malloc(1),
|
||||||
|
.str_size = 1};
|
||||||
|
t.str[0] = '\0';
|
||||||
|
++buffer->used;
|
||||||
|
}
|
||||||
else if (isdigit(c) || (space_left(buffer) > 1 && c == '-' &&
|
else if (isdigit(c) || (space_left(buffer) > 1 && c == '-' &&
|
||||||
isdigit(buffer->data[buffer->used + 1])))
|
isdigit(buffer->data[buffer->used + 1])))
|
||||||
t = tokenise_number_literal(buffer, &column);
|
t = tokenise_number_literal(buffer, &column);
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
typedef enum TokenType
|
typedef enum TokenType
|
||||||
{
|
{
|
||||||
|
TOKEN_STAR,
|
||||||
TOKEN_LITERAL_NUMBER,
|
TOKEN_LITERAL_NUMBER,
|
||||||
TOKEN_LITERAL_CHAR,
|
TOKEN_LITERAL_CHAR,
|
||||||
TOKEN_NOOP,
|
TOKEN_NOOP,
|
||||||
|
|||||||
4
todo.org
4
todo.org
@@ -2,14 +2,14 @@
|
|||||||
#+author: Aryadev Chavali
|
#+author: Aryadev Chavali
|
||||||
#+date: 2023-11-02
|
#+date: 2023-11-02
|
||||||
|
|
||||||
* TODO Write a label/jump system :ASM:
|
* WIP Write a label/jump system :ASM:
|
||||||
Essentially a user should be able to write arbitrary labels (maybe
|
Essentially a user should be able to write arbitrary labels (maybe
|
||||||
through ~label x~ or ~x:~ syntax) which can be referred to by ~jump~.
|
through ~label x~ or ~x:~ syntax) which can be referred to by ~jump~.
|
||||||
|
|
||||||
It'll purely be on the assembler side as a processing step, where the
|
It'll purely be on the assembler side as a processing step, where the
|
||||||
emitted bytecode purely refers to absolute addresses; the VM should
|
emitted bytecode purely refers to absolute addresses; the VM should
|
||||||
just be dealing with absolute addresses here.
|
just be dealing with absolute addresses here.
|
||||||
* TODO Allow relative addresses in jumps :ASM:
|
* WIP Allow relative addresses in jumps :ASM:
|
||||||
As requested, a special syntax for relative address jumps. Sometimes
|
As requested, a special syntax for relative address jumps. Sometimes
|
||||||
it's a bit nicer than a label.
|
it's a bit nicer than a label.
|
||||||
* TODO Calling and returning control flow :VM: :ASM:
|
* TODO Calling and returning control flow :VM: :ASM:
|
||||||
|
|||||||
Reference in New Issue
Block a user