Re: Logic evaluator (truth table listing)

From NAT, 5 Years ago, written in Bash, viewed 423 times. This paste is a reply to Logic evaluator (truth table listing) from NAT - go back
URL https://code.nat.moe/view/8f1c7daa/diff Embed
Viewing differences between Logic evaluator (truth table listing) and Re: Logic evaluator (truth table listing)
#!/bin/bash

#!/bin/bash
# Notice: only work when in PATH, or call using absolute path.

trap 'exit 0' 'quit' 2 15

b=$(tput bold)
n=$(tput sgr0)

# Operators

function disj {
        [[ $1 == "T" ]] && echo "T" && return
        [[ $2 == "T" ]] && echo "T" && return
        echo "F" && return
}

function conj {
        [[ $1 == "T" && $2 == "T" ]] && echo "T" && return
        echo "F" && return
}

function impl {
        [[ $1 == "T" && $2 == "F" ]] && echo "F" && return
        echo "T" && return
}

function req {
        impl $2 $1
}

function eq {
        [[ $1 == $2 ]] && echo "T" && return
        echo "F" && return
}

function not {
        [[ $1 == "T" ]] && echo "F" && return
        echo "T" && return
}

[[ $1 == source ]] && return

# Codegen

function mkcode {
        tmp="$(mktemp)"

        expr_src="$(cat)"
        vars="$(_uppercase <<< "$expr_src")"
        core_expr="$(sed -e 's/(/$(/g; s/[A-Z]/$&/g;s/^$//; ' <<< "$expr_src")"

        {

        echo -e '#!/bin/bash\n. '$0' source'

        for var in $vars; do echo 'echo -n "'$var'; "'; done;

        [[ ! -z $vars ]] && echo 'echo'

        for var in $vars; do
                echo 'for '$var' in T F; do '
        done

                for _var in $vars; do
                        echo 'echo -n "$'$_var'; "'
                done

                echo 'echo "'$b'=>'$n' '$core_expr';"; '

        for var in $vars; do echo 'done; '; done

        } > $tmp

        bash $tmp
        rm $tmp
}

function _uppercase {
        tr ' ' '\n' | grep -E '[A-Z]' | sed 's/.*\([A-Z]\).*/\1/' | sort | uniq | tr '\n' ' '
}

function quit {

        [[ -e "$tmpd" ]] && rm -r "$tmpd"
        exit 0

}

function main {

        tmpd="$(mktemp -d)"
        cd $tmpd; touch disj conj impl req eq not

        echo "nato's logic evaluator (truth table listing) tool, "
        echo "version: 0.1; 1.2; "
        echo
        echo "commands: "
        echo "  disj <p> <q>: disjunction of p and q. (or)"
        echo "  conj <p> <q>: conjunction of p and q. (and)"
        echo "  impl <p> <q>: p implies q. (condition)"
        echo "   req <p> <q>: p require q. (n. condition)"
"$b?>$n "$flags$b?>$n " expr_; do 
do 
                history -s "$expr_"
                mkcode <<< "$expr_"
                history -s "$expr_"
        done
}

mainmain
quit

Reply to "Re: Logic evaluator (truth table listing)"

Here you can reply to the paste above

captcha