Skip to content

Instantly share code, notes, and snippets.

@maximvl
Created November 23, 2014 11:11
Show Gist options
  • Save maximvl/3ffb540044f866a512ee to your computer and use it in GitHub Desktop.
Save maximvl/3ffb540044f866a512ee to your computer and use it in GitHub Desktop.
REBOL [
subject "FORTH interpreter"
]
forth: make object! [
stack: []
dup: [ 'dup (insert stack stack/1) ]
drop: [ 'drop (remove stack) ]
drop-n: [ 'drop-n (remove/part stack stack/1) ]
add: [ '+ (insert stack (take stack) + (take stack)) ]
sub: [ '- (insert stack (take stack) - (take stack)) ]
mul: [ '* (insert stack (take stack) * (take stack)) ]
divider: to-lit-word "/"
div: [ divider (insert stack (take stack) / (take stack)) ]
command: [ dup | drop | drop-n | add | sub | mul | div ]
token: [ set n [ number! | time! ] (insert stack n) | command ]
rules: [ any token (print mold stack) ]
run: func [ expr ] [ parse expr rules ]
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment