aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2023-11-02 20:31:22 +0000
committerAryadev Chavali <aryadev@aryadevchavali.com>2023-11-02 20:31:22 +0000
commitd5e311c9d44793d269e9b8ee5e8c0fa7a1a25a50 (patch)
tree7bf71c7332453877a432a16adf57e4cf9e48533e
parentd12820cd2526c63c34e2a2f393faff6d79f56898 (diff)
downloadovm-d5e311c9d44793d269e9b8ee5e8c0fa7a1a25a50.tar.gz
ovm-d5e311c9d44793d269e9b8ee5e8c0fa7a1a25a50.tar.bz2
ovm-d5e311c9d44793d269e9b8ee5e8c0fa7a1a25a50.zip
Started work on preprocessing jump addresses
-rw-r--r--asm/lexer.c13
-rw-r--r--asm/lexer.h1
-rw-r--r--todo.org4
3 files changed, 15 insertions, 3 deletions
diff --git a/asm/lexer.c b/asm/lexer.c
index 0a8a97e..01c2e5d 100644
--- a/asm/lexer.c
+++ b/asm/lexer.c
@@ -24,6 +24,8 @@ const char *token_type_as_cstr(token_type_t type)
{
switch (type)
{
+ case TOKEN_STAR:
+ return "STAR";
case TOKEN_LITERAL_NUMBER:
return "LITERAL_NUMBER";
case TOKEN_LITERAL_CHAR:
@@ -124,7 +126,7 @@ char uppercase(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)
@@ -431,6 +433,15 @@ lerr_t tokenise_buffer(buffer_t *buffer, token_stream_t *tokens_ptr)
++buffer->used;
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 == '-' &&
isdigit(buffer->data[buffer->used + 1])))
t = tokenise_number_literal(buffer, &column);
diff --git a/asm/lexer.h b/asm/lexer.h
index 6b17b04..2d747bc 100644
--- a/asm/lexer.h
+++ b/asm/lexer.h
@@ -17,6 +17,7 @@
typedef enum TokenType
{
+ TOKEN_STAR,
TOKEN_LITERAL_NUMBER,
TOKEN_LITERAL_CHAR,
TOKEN_NOOP,
diff --git a/todo.org b/todo.org
index c0e2188..8749ef5 100644
--- a/todo.org
+++ b/todo.org
@@ -2,14 +2,14 @@
#+author: Aryadev Chavali
#+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
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
emitted bytecode purely refers to absolute addresses; the VM should
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
it's a bit nicer than a label.
* TODO Calling and returning control flow :VM: :ASM: