added first prototype

This commit is contained in:
Rachel Lambda Samuelsson 2021-04-15 13:40:48 +02:00
commit 5e9ef51703

95
f.sh Normal file
View File

@ -0,0 +1,95 @@
#!/bin/sh
alias :=_newword
alias '(=:'
alias ')=;'
_stack="" # top is
_builtin_dictionary="swap dup rot over drop add sub div mod mul put" # + - / * .
_dictionary=
_newword() {
name="$1"
shift
export "\$${name}_definition=\"$*\""
}
_execword() {
eval "def='$1_definition'"
for word in $def; do
case "$_builtin_dictionary" in
*"$word"*) "_$word" "$_stack" ;;
*) _execword "$word" ;;
esac
done
}
_swap() {
one="$1"
two="$2"
shift
_stack="$2 $1 $*"
}
_dup() {
_stack="$1 $*"
}
_rot() {
one="$1"
two="$2"
thr="$3"
shift 3
_stack="$3 $1 $2 $*"
}
_over() {
_stack="$2 $*"
}
_drop() {
shift
_stack="$*"
}
_add() {
one="$1"
two="$2"
shift 2
_stack="$(( one + two )) $*"
}
_sub() {
one="$1"
two="$2"
shift 2
_stack="$(( two - one )) $*"
}
_div() {
one="$1"
two="$2"
shift 2
_stack="$(( two / one )) $*"
}
_mod() {
one="$1"
two="$2"
shift 2
_stack="$(( two % one )) $*"
}
_mul() {
one="$1"
two="$2"
shift 2
_stack="$(( one * two )) $*"
}
_put() {
one="$1"
shift
printf '%s \n' "$one"
_stack="$*"
}