b7c4a37483
Make data keep track of their last use
2025-07-01 13:22:24 +02:00
9e643e6c6d
Add compiler middle stage
...
The compiler middle stage takes high level nodes and produces code in
an intermediate representation more closely resembling assembly code.
Optimizations and the tools for making those are also included. It's
significantly easier to optimize IR than syntax trees or assembly.
Several things need cleaning up, in particular there are things in
jigs.lisp that really should be documented tools, not
jigs (specifically the compilation setup and finalization).
2025-06-26 13:41:43 +02:00
7703c71141
Add tool for quickly defining common PRINT-OBJECT methods
2025-06-26 12:44:43 +02:00
2c529c368a
Reorder parsing so calls get properly parsed inside expressions
2025-06-21 21:04:26 +02:00
4011e3b0db
Reorder loading of high-level.lisp
2025-06-21 21:02:58 +02:00
61ea8b3773
Move NODE-CONDITIONAL definition to proper place
2025-06-19 15:07:23 +02:00
2b94745734
Some little cleanup
2025-06-13 09:19:00 +02:00
928cdfd318
Add user-side compiler's parser
...
It ingests tokens via a "token stream", and feeds out a node
tree. It's a mostly handwritten recursive descent parser with the
occasional Lisp macros for convenience.
2025-05-22 13:14:55 +02:00
f9f2694b96
Add two more code examples
2025-05-22 13:14:55 +02:00
08f9cc4a11
Remove premature code generation from high-level and add new nodes
...
The new nodes are more directly representational of the syntax, and
code generation will be moved to an intermediate stage with a more
linear (yet still node-based) representation.
2025-05-22 13:14:55 +02:00
3f3d94367f
Add PRINT-OBJECT method to TOKEN-NUMBER
2025-05-22 13:14:55 +02:00
12d1a905fe
Add stub ASM-FUNCTION class
2025-05-22 13:14:55 +02:00
38406c80ee
Add various transformation rules
2025-05-22 13:14:55 +02:00
ebe27cf026
Make methods for nodes to list their potential next nodes
2025-05-22 13:14:55 +02:00
4bf1316536
Half-baked and half-hearted attempt to let nodes hold comments
2025-05-22 13:14:55 +02:00
57c2978b71
Adjust reference PRINT-OBJECTs to not error on unbound slots
2025-05-22 13:14:55 +02:00
3c8835eb7b
Make references able to hold a name
2025-05-22 13:14:55 +02:00
7639263bed
Make TRANSFORM return OBJ if it's already TO-TYPE
2025-05-22 13:14:55 +02:00
1307e31268
Better handling of operators, source, and comments in tokenizer
...
...among other minor changes to accomodate the parser.
2025-05-22 13:14:55 +02:00
8acbf2caec
Define more atomic tokens, and add shortcut macro for doing it
2025-05-22 13:14:55 +02:00
ae39a48890
Add PRINT-OBJECT method for TOKEN-NAME
2025-05-22 13:14:55 +02:00
25fd7675d0
Rename TOKEN-NAME's TEXT slot to NAME to match TOKEN-KEYWORD
2025-05-22 13:14:55 +02:00
45a66ce323
Give tokens an INITFORM for SOURCE (to NIL)
2025-05-22 13:14:55 +02:00
5a18cc9864
Make NODE-DOTIMES hold a counter variable
2025-05-22 13:14:55 +02:00
6b74c0247e
Move and rename syntax-example.txt
2025-05-22 13:14:55 +02:00
e6e2e94404
Add symbol table
2025-05-16 21:00:57 +02:00
0867e99cc1
Various messes
2025-05-16 21:00:14 +02:00
5d0f4b4767
Move definition of REFERENCE classes to its own file
...
Dereferencing is still defined in high-level.lisp, this might change
in the future since I'm sort of restructuring a little bit.
2025-05-16 21:00:14 +02:00
449e36e183
Add reference equality test (only implemented for constants so far)
2025-05-16 21:00:14 +02:00
e88e966521
Add mechanism for transforming objects to different types
2025-05-16 21:00:14 +02:00
3211f6d441
Add primitive tokenizer for USC
2025-05-16 12:31:18 +02:00
b9bda5ad68
Add missing RELATIVE-MIXIN
2025-05-16 12:31:18 +02:00
bc3e07356e
Add a USC test program
2025-05-16 10:39:03 +02:00
c336e43c19
Add bytesquashing (turning instructions etc. into dead bytes)
2025-05-08 22:18:57 +02:00
010cc5dd87
Make FIX-LABEL-ADDRESSES-IN-INSTRUCTION-LIST add PROGRAM_END label
2025-05-08 22:18:57 +02:00
9d2d0dea6b
Fix instruction redefinition and add some opcodes
2025-05-08 22:18:57 +02:00
184d0324c0
Fix broken INSTRUCTION-LENGTH
2025-05-08 22:18:57 +02:00
31bb5f8509
Add offset label class
2025-05-08 22:18:57 +02:00
15a70836ac
Add temporary ARGVEC and VARVEC definitions
2025-05-08 22:18:57 +02:00
4a4a7b8485
Add LABELP predicate
2025-05-08 22:18:57 +02:00
379d33d5a1
Move label name + prefix warning to the right place
2025-05-08 22:18:57 +02:00
eec5edc715
Correct instruction length of immediates
2025-05-08 22:18:57 +02:00
37b2864a7d
Add function to compute addresses of labels in instruction list
2025-05-08 19:36:10 +02:00
501da2341e
Bind *LABEL-COUNTER* to 0 at the start of compiling
2025-05-08 19:33:31 +02:00
bcc039774b
Move *LABEL-COUNTER* to label.lisp
2025-05-08 19:33:13 +02:00
5ca740efa9
Add PRODUCE-COMMENT
2025-05-08 19:32:54 +02:00
8dd78265b4
Nicer instruction printing
2025-05-08 19:32:43 +02:00
41bd413b4c
Add LABEL class and replace uses of temporary strings with it
2025-05-08 19:10:38 +02:00
76f1fa0658
Add relative addressing type for branches
2025-05-08 19:10:15 +02:00
37241a1fc3
Replace the text assembly in high-level with instruction objects
2025-05-08 17:11:57 +02:00