# jetzt habe ich es so geloest, da ist wieder ein neuer fehler drin #!/bin/bash # (C) David Vajda # 2025-07-30 # Circuit Excersize, US ... # bakus naur - normalform - grammar rules (easiest level, linksrekursiv) # expr ::= expr + term | term # term ::= term * fact | fact # fact ::= const | (expr) # expr ::= term expr2 # expr2 ::= + term expr2 # term ::= fact term2 # term2 ::= * fact term2 # fact ::= const | id | (expr) # also: # expr ::= term expr2 # expr2 ::= OR term expr2 # term ::= fact term2 # term2 ::= AND fact term2 # fact ::= id | NOT id | (expr) date=$(date) yes=1 no=0 op1="AND" op2="OR" op3="NOT" MAXVAR=4 if [ -z "$1" ] then /bin/bash "$0" "expr" 1 elif [ "$1" == "expr" ] then /bin/bash "$0" "term" $2 /bin/bash "$0" "expr2" $2 elif [[ "$1" == "expr2" || -z "$1" ]] then decision=$(($RANDOM%2)) if [ "$decision" == "$yes" ] then echo -n " $op2 " /bin/bash "$0" "term" $2 /bin/bash "$0" "expr2" $2 fi elif [[ "$1" == "term" || -z "$1" ]] then /bin/bash "$0" "fact" $2 /bin/bash "$0" "term2" $2 elif [[ "$1" == "term2" || -z "$1" ]] then decision=$(($RANDOM%2)) if [ "$decision" == "$yes" ] then echo -n " $op1 " /bin/bash "$0" "fact" $2 /bin/bash "$0" "term2" $2 fi elif [ "$1" == "fact" ] then decision=$(($RANDOM%2)) l=$(($2)) l=$(($l-1)) if [[ $decision -eq "$yes" || $l -lt 0 ]] then decision=$(($RANDOM%2)) if [ $decision -eq "$yes" ] then echo -n " $op3 " fi echo -n "x$(($RANDOM%$MAXVAR))" else decision=$(($RANDOM%2)) echo -n "(" /bin/bash "$0" "expr" "$l" echo -n ")" fi fi if [ -z "$1" ] then echo "" fi