#!/usr/bin/env bash source $(dirname $0)/reader.sh source $(dirname $0)/printer.sh # read proc READ { test ${1} && setvar r = "${1}" || READLINE READ_STR ${r} } # eval proc EVAL { local ast="${1}" local env="${2}" setvar r = '' [[ "${__ERROR}" ]] && return 1 setvar r = "${ast}" } # print proc PRINT { if [[ "${__ERROR}" ]] { _pr_str ${__ERROR} yes setvar r = ""Error: ${r}"" setvar __ERROR = '' } else { _pr_str ${1} yes } } # repl proc REP { READ ${1} EVAL ${r} PRINT ${r} } # repl loop while true { READLINE "user> " || exit "$?" [[ "${r}" ]] && REP ${r} && echo ${r} }