#!/bin/sh # NOTE: at some point, this may be rewritten in Perl, but it was eay and quick enough # to do it this way so that is why. showhelp() { echo "" echo "fash provides an easier commandline interface to one liners available via FLAT::CMD" echo " Usage:" echo " 1. % flat [parameter1 parameter2 ... parameterN]" echo " 2. % cat file.dat | fash -b test" echo "" echo " Actions:" echo " somestrings \"regular_expression\"" echo " Outputs strings based on all acyclic paths from start to all final states found in the minimal DFA" echo "" echo " morestrings \"regular_expression\"" echo " Outputs strings associated with all acyclic paths and backedges detected on an accepting state from" echo " start to all final states found in the minimal DFA" echo "" echo " dump \"regular_expression\"" echo " Perl dump parse tree of given regex." echo "" echo " dfa2gv \"regular_expression\"" echo " Dumps out FA in graphviz input format; useful for visualizing FA" echo "" echo " nfa2gv \"regular_expression\"" echo " Dumps out FA in graphviz input format; useful for visualizing FA" echo "" echo " pfa2gv \"regular_expression\"" echo " Dumps out FA in graphviz input format; useful for visualizing FA" echo "" echo " dfa2undgv \"regular_expression\"" echo " Dumps out undirected graph underlying the FA in graphviz input format; useful for visualizing FA" echo "" echo " nfa2undgv \"regular_expression\"" echo " Dumps out undirected graph underlying the FA in graphviz input format; useful for visualizing FA" echo "" echo " pfa2undgv \"regular_expression\"" echo " Dumps out undirected graph underlying the FA in graphviz input format; useful for visualizing FA" echo "" echo " dfa2digraph \"regular_expression\"" echo " Outputs digraph of FA for input into a program that might operate over the underlying graph." echo "" echo " nfa2digraph \"regular_expression\"" echo " Outputs digraph of FA for input into a program that might operate over the underlying graph." echo "" echo " pfa2digraph \"regular_expression\"" echo " Outputs digraph of FA for input into a program that might operate over the underlying graph." echo "" echo " dfa2undirectedgraph \"regular_expression\"" echo " Outputs undirected graph of FA for input into a program that might operate over the underlying graph." echo "" echo " nfa2undirectedgraph \"regular_expression\"" echo " Outputs undirected graph of FA for input into a program that might operate over the underlying graph." echo "" echo " pfa2undirectedgraph \"regular_expression\"" echo " Outputs undirected graph of FA for input into a program that might operate over the underlying graph." echo "" echo " test \"regular_expression\" \"test_string\"" echo " Given a regular expression, tests the given string(s) for acceptance." echo "" echo " compare \"regular_expression1\" \"regular_expression2\"" echo " Compares 2 regularexpressions." echo "" echo " Notes on 'test' action:" echo " this action may accept STDIN when using the -b flag; the " echo " format of the file should be a regular expression in the " echo " top line, followed by strings to test for acceptance." echo "" } LISTENSTDIN=0 while getopts 'b' option; do case "$option" in b) LISTENSTDIN=1 # specify INDEX to $OPTARG shift # get reid of -b so the default vars below work ;; esac done if [ ${LISTENSTDIN} -eq 1 ]; then IFS="" # ensures that leading spaces are retained while read -r IN <&0 ; do # break after 1 sec of no stdin if [ -z "${ALL}" ]; then ALL="${IN}"; else ALL="${ALL}\n${IN}"; fi done fi case "${1}" in dump) perl -MFLAT::CMD -e "dump(\"${2}\")" ;; dfa2gv) perl -MFLAT::CMD -e "dfa2gv(\"${2}\")" ;; nfa2gv) perl -MFLAT::CMD -e "nfa2gv(\"${2}\")" ;; pfa2gv) perl -MFLAT::CMD -e "pfa2gv(\"${2}\")" ;; dfa2undgv) perl -MFLAT::CMD -e "dfa2undgv(\"${2}\")" ;; nfa2undgv) perl -MFLAT::CMD -e "nfa2undgv(\"${2}\")" ;; pfa2undgv) perl -MFLAT::CMD -e "pfa2undgv(\"${2}\")" ;; somestrings) perl -MFLAT::CMD::AcyclicStrings -e "as_strings(\"${2}\")" ;; morestrings) if [ -n "${3}" ]; then perl -MFLAT::CMD::DFTStrings -e "as_strings(\"${2}\",\"${3}\")" else perl -MFLAT::CMD::DFTStrings -e "as_strings(\"${2}\")" fi ;; dfa2digraph) perl -MFLAT::CMD -e "dfa2digraph(\"${2}\")" ;; nfa2digraph) perl -MFLAT::CMD -e "nfa2digraph(\"${2}\")" ;; pfa2digraph) perl -MFLAT::CMD -e "pfa2digraph(\"${2}\")" ;; dfa2undirected) perl -MFLAT::CMD -e "dfa2undirected(\"${2}\")" ;; nfa2undirected) perl -MFLAT::CMD -e "nfa2undirected(\"${2}\")" ;; pfa2undirected) perl -MFLAT::CMD -e "pfa2undirected(\"${2}\")" ;; random_re) perl -MFLAT::CMD -e random_re ;; random_pre) perl -MFLAT::CMD -e random_pre ;; compare) perl -MFLAT::CMD -e "compare(\"${2}\",\"${3}\")" ;; test) # how we'll handle STDIN if [ ${LISTENSTDIN} -eq 1 ]; then echo "$ALL" | perl -MFLAT::CMD -e "test" else perl -MFLAT::CMD -e "test(\"${2}\",\"${3}\")" fi ;; savedfa) perl -MFLAT::CMD -e "savedfa(\"${2}\")" ;; help) showhelp ;; *) echo function \""${1}"\" not available ;; esac