parent
be084210f9
commit
add154df51
@ -0,0 +1,77 @@ |
||||
Forth |
||||
===== |
||||
|
||||
This is a new implementation of Forth 2012 in C. |
||||
|
||||
Building & use |
||||
-------------- |
||||
|
||||
Use cmake or `build.sh`. It probably needs GCC with `--std=gnu99`. |
||||
|
||||
You get a binary with the forth runtime. Run it to get a prompt. Use `-h` for help. |
||||
|
||||
Goals |
||||
----- |
||||
|
||||
- Comfy to use and extend |
||||
- No dynamic allocation where possible |
||||
- Compact and embeddable so it can be ported to ARM-CortexM or similar later |
||||
- Implement the CORE and CORE-EXT word sets, for a start |
||||
- Pass the [Forth2012 test suite](https://github.com/gerryjackson/forth2012-test-suite), at least for the word sets that are implemented |
||||
- Maybe eventually have some terminal-based implementation of a subset of the Facility word set, like AT-XY and keyboard input |
||||
- Try to keep added custom words and quirks at a minimum |
||||
- Comment stuff, maybe |
||||
|
||||
Non-Goals |
||||
--------- |
||||
|
||||
- I don't really care about implementing some of the word sets |
||||
- Performance is not so critical for a hobby Forth like this |
||||
- Probably won't accept merge requests, this is my Forth |
||||
- I also don't care about someone telling me to add a license file |
||||
|
||||
Custom words |
||||
------------ |
||||
- `.\"` - like `."` but allows escaping, this is essentially `S\" blah" TYPE`, but without allocation (unless compiled) |
||||
- `??` - debug dump of the stacks |
||||
- `reset` - everything should become like if you restarted the program |
||||
- `debug ( flag -- )` - enable or disable verbose logging |
||||
|
||||
For debug, there is `see ( "word" -- )` that lets you inspect and disassemble dictionary entries. |
||||
|
||||
Implementation status |
||||
--------------------- |
||||
|
||||
*(this section may be outdated)* |
||||
|
||||
Implemented: |
||||
|
||||
``` |
||||
CORE: |
||||
! ' ( * */ */MOD + +! +LOOP , - . ." / /mod 0< 0= 1+ 1- 2! 2* 2/ 2@ 2DROP 2DUP 2OVER 2SWAP |
||||
: ; < = > >IN >R ?DUP @ ABORT ABS ALIGN ALIGNED ALLOT AND BASE BEGIN BL CELL CELL+ CELLS CHAR CHAR+ |
||||
CHARS CONSTANT COUNT CR CREATE DECIMAL DEPTH DO DROP DUP ELSE EMIT ENVIRONMENT? EXECUTE EXIT FIND |
||||
HERE I IF IMMEDIATE INVERT J LEAVE LITERAL LOOP MOD NEGATE OR OVER POSTPONE QUIT R> R@ RECURSE |
||||
REPEAT ROT S" SOURCE SPACE SWAP THEN TYPE U< UNTIL VARIABLE WHILE WORD XOR [ ['] [CHAR] ] |
||||
|
||||
CORE-EXT: |
||||
.( 0<> 0> 2>R 2R> 2R@ <> ?DO AGAIN FALSE HEX NIP PAD PICK ROLL S\" TO TRUE TUCK U.R U> UNUSED VALUE |
||||
\ |
||||
|
||||
Other sets: |
||||
FORGET SEE BYE |
||||
``` |
||||
|
||||
Missing: |
||||
|
||||
``` |
||||
CORE: |
||||
# #> #S <# >BODY >NUMBER ABORT" ACCEPT C! C, C@ DOES> EVALUATE FILL FM/MOD HOLD KEY LSHIFY M* MAX |
||||
MIN MOVE RSHIFT S>D SIGN SM/REM SPACES STATE U. UM* UM/MOD UNLOOP |
||||
|
||||
CORE-EXT: |
||||
.R :NONAME ACTION-OF BUFFER: C" CASE COMPILE, DEFER DEFER! DEFER@ ENDCASE ENDOF ERASE HOLDS IS |
||||
MARKER OFPARSE PARSE-NAME REFILL RESTORE-INPUT SAVE-INPUT SOURCE-IDWITHIN [COMPILE] |
||||
``` |
||||
|
||||
. |
Loading…
Reference in new issue