This is an implementation of the FORTH Standard: Core in Common Lisp. It's primary aim is to familiarise myself with implementing a programming language.
Currently I have got most of the standard maths words working, function definitions working, conditional working and while loops working.
I'm working on implementing do ...loop(+)s right now.
There also isn't any parsing, everything is parsed as a list so : plus-three 3 + ; needs to be written as \: plus-three 3 + \; and then passed to the run function.
The implementation is characterised by the use of a macro which allows for many common words to be implemented in the same notation as in the documents, so in the docs it might say (n1 n2 -- n3) for the + word and the implementation would be (n1 n2 -- (+ n1 n2)).
In general many anaphoric macros are used for ease of implementation, although I'm a bit concerned now about the mantainability because of how many variables are anaphoric. Were I to implement it again, I would still include with-state but I would not include any macro which assumed the name of an argument (e.g. assuming the control variable existed and represented the control stack).
- Sam de Clerc (jaimelelait@icloud.com)
Copyright (c) 2020 Sam de Clerc (jaimelelait@icloud.com)
Licensed under the GPLv3 (or later) License.