Aryadev Chavali
76bb5ec7d9
(Lexer)+to_string functions for Err, Err::Type
2024-06-01 13:53:54 +01:00
Aryadev Chavali
4625b3b7a5
(Lexer)+to_string functions for Token, Token::Type
2024-06-01 13:51:10 +01:00
Aryadev Chavali
a4689f9dd0
Lexer call pattern is now Err return with reference to token
2024-06-01 13:40:17 +01:00
Aryadev Chavali
7e9af309e3
lerr_t and lerr_type_t -> Lexer::Err and Lexer::Err::Type
2024-06-01 13:40:17 +01:00
Aryadev Chavali
4b85f90a52
Namespace the lexer module
...
Future proofing any name collisions.
2024-06-01 01:52:17 +01:00
Aryadev Chavali
83ad8b832b
token_type_t -> Token::Type
...
Implicit namespacing using the struct
2024-06-01 01:49:24 +01:00
Aryadev Chavali
f5d8777b7a
token_t -> Token
...
Use C++'s implicit typedef
2024-06-01 01:48:11 +01:00
Aryadev Chavali
f3f7578811
Update lexer trivially
...
HALT is now an opcode, which we deal with already.
2024-06-01 01:47:16 +01:00
Aryadev Chavali
bbb8ed1337
Merge remote-tracking branch 'github/master'
2024-06-01 01:20:16 +01:00
Aryadev Chavali
2d5d8c7904
Update AVM and clean dir-locals
2024-06-01 01:18:56 +01:00
Aryadev Chavali
1ce5bf556e
Update AVM
2024-04-16 20:52:32 +06:30
Aryadev Chavali
52843e2e14
Removed workflow as it doesn't work with submodules
2024-04-16 20:43:56 +06:30
Aryadev Chavali
f060a856d3
Fixed Makefile so it tracks dependencies better
...
It now tracks main.cpp's dependencies and rebuilds them as needed.
2024-04-16 20:42:51 +06:30
Aryadev Chavali
190bb766cb
Added a TODO to write a specification for the assembly language
2024-04-16 19:18:35 +06:30
Aryadev Chavali
3b9e573c4a
Made AVM a git submodule, updated the Makefile to build assembler
...
Also updated dir-locals to make include path resolution accurate.
2024-04-16 19:18:32 +06:30
Aryadev Chavali
9d72c9177d
Clean up work tree for making assembler
2024-04-16 19:14:24 +06:30
Aryadev Chavali
2a1d006a88
Updated README about change to project
2024-04-16 15:49:26 +06:30
Aryadev Chavali
8f75241bcb
Halting work on preprocesser units and rewrite as a whole
...
I've decided to split the project into 2 repositories: the assembler
and the runtime. The runtime will contain both the executable and
lib/ while the assembler will have the runtime as a git submodule and
use it to build. I think this is a clean solution, a lot cleaner than
having them all in one project where the Makefile has to massively
expand.
2024-04-16 15:42:59 +06:30
Aryadev Chavali
d5c43b1c3f
Wrote up some notes on how preprocesser language may work
...
Bit formal and really excessively written but I needed my thoughts
down.
2024-04-16 15:42:34 +06:30
Aryadev Chavali
715facf015
Updated README lines of code
2024-04-16 15:42:22 +06:30
Aryadev Chavali
4ecd184759
lerr_type_t::UNKNOWN_CHAR -> UNKNOWN_LEXEME
2024-04-16 15:41:01 +06:30
Aryadev Chavali
27d6a47320
Clean up error message from preprocesser
2024-04-16 15:40:49 +06:30
Aryadev Chavali
3fc1f08134
Fix bug where CONST table didn't actually store symbol names
...
Pretty simple fix, stupid error in hindsight.
2024-04-16 15:40:00 +06:30
Aryadev Chavali
4b3e9b3567
Clear vector after deleting all tokens
...
Ensures that iteration over vec_out by caller doesn't occur (such as
in a loop to free the memory).
2024-04-16 15:39:20 +06:30
Aryadev Chavali
05136fdd25
Fixed examples for changes in lexer
...
Name assigned to %CONST is the next symbol in stream, not the symbol
attached to it.
2024-04-16 15:38:24 +06:30
Aryadev Chavali
1e7f1bdee9
Changed %const format in preprocesser now
...
Instead of %const(<name>) ... %end it will now be %const <name>
... %end i.e. the first symbol after %const will be considered the
name of the constant similar to %use.
2024-04-15 18:39:37 +06:30
Aryadev Chavali
ba3525d533
preprocesser publicly exposes only preprocesser function
...
The preprocess_* functions are now privately contained within the
implementation file to help the preprocesser outer function.
Furthermore I've simplified the API of the preprocess_* functions by
making them only return pp_err_t and store their results in a vector
parameter taken by reference.
2024-04-15 18:37:45 +06:30
Aryadev Chavali
d594c0c531
Annotate some completed todos in todo.org
2024-04-15 16:35:44 +06:30
Aryadev Chavali
e960af2904
Added some VERBOSE checked messages into asm/main
2024-04-15 16:33:22 +06:30
Aryadev Chavali
4a7341e26c
Propagate changes to lerr_t into preprocesser
2024-04-15 16:33:02 +06:30
Aryadev Chavali
b83bdd0d45
preprocesser function now only returns a pp_err_t
...
We leave the parameter tokens alone, considering it constant, while
the parameter vec_out is used to hold the new stream of tokens. This
allows the caller to have a before and after view on the token stream
and reduces the worry of double frees.
2024-04-15 16:31:45 +06:30
Aryadev Chavali
c748ed8386
Changed output schema for printing tokens
2024-04-15 16:31:07 +06:30
Aryadev Chavali
83faf86312
Fix error where lexer would loop infinitely if unknown character found
2024-04-15 16:30:44 +06:30
Aryadev Chavali
0f430e399c
Changed hex format from x<digits> -> 0x<digits>
2024-04-15 16:30:30 +06:30
Aryadev Chavali
175138f570
Lexical error on char literal being too big or too small
...
This is actually an improvement on the older lexer.
2024-04-15 16:29:42 +06:30
Aryadev Chavali
a2d98142d5
lerr_t is now a struct with constructors
...
Similar principle to pp_err_t in that a structure provides the
opportunity for more information about the error such as location.
2024-04-15 16:29:37 +06:30
Aryadev Chavali
ae3794c33e
constexpr -> const in lexer.cpp
...
Not much of an actual performance change, more semantic meaning for me.
2024-04-15 16:27:05 +06:30
Aryadev Chavali
a70dcf2e3f
~extern "C"~ when including lib/inst.h
2024-04-15 16:26:44 +06:30
Aryadev Chavali
5319fd815d
Dependencies stricter and prerequisites for directories in Makefile
...
Don't need to make a directory every time I compile some code.
2024-04-15 16:25:35 +06:30
Aryadev Chavali
58069e083d
Auto filled copyrightn otice in asm/base
2024-04-15 16:25:14 +06:30
Aryadev Chavali
958868714e
main.cpp now preprocesses tokens and prints the output
2024-04-15 05:56:01 +06:30
Aryadev Chavali
e22ed450ac
Fix some off by one errors
2024-04-15 05:34:52 +06:30
Aryadev Chavali
940dd2021e
Fix issue with use_blocks not being preprocessed
2024-04-15 05:34:41 +06:30
Aryadev Chavali
7a6275c0a1
fix memory leak through vec.clear
...
vec.clear() doesn't delete pointers (unless they're smart) so I need
to do it myself.
2024-04-15 05:34:02 +06:30
Aryadev Chavali
8d3951a871
Implemented preprocesser function.
2024-04-15 05:08:55 +06:30
Aryadev Chavali
1e1a13e741
Default constructor for pp_err_t
2024-04-15 05:08:40 +06:30
Aryadev Chavali
0e5c934072
preprocess_* now uses const references to tokens
...
They copy and construct new token vectors and just read the token
inputs.
2024-04-15 05:08:07 +06:30
Aryadev Chavali
9ca93786af
Updated main.cpp for changes to lexer
2024-04-15 05:07:16 +06:30
Aryadev Chavali
ec87245724
Implemented preprocess_const_blocks
...
Once again quite similar to preprocess_macro_blocks but shorter,
easier to use and easier to read. (76 vs 109)
2024-04-15 04:55:51 +06:30
Aryadev Chavali
81efc9006d
Implement printing of pp_err_t
...
Another great thing for C++: the ability to tell it how to print
structures the way I want. In C it's either:
1) Write a function to print the structure out (preferably to a file
pointer)
2) Write a function to return a string (allocated on the heap) which
represents it
Both are not fun to write, whereas it's much easier to write this.
2024-04-15 04:55:51 +06:30