package main import ( "fmt" "logik/aussagenlogik/rekursion" "logik/aussagenlogik/schema" "logik/aussagenlogik/syntaxbaum" env "logik/core/environment" "logik/core/utils" "strings" "github.com/lithammer/dedent" ) var DATA_ENV string = "data.env" type dataType struct { expr string interpretation []string } type resultsType struct { eval int atoms []string depth int length int nParentheses int } var data dataType func main() { // Extrahiere Daten getData() // Ausdruck -> Syntaxbaum tree := schema.ParseExpr(data.expr) results := getResults(tree) // Resultate anzeigen: displayResults(tree, results) } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // SONSTIGE METHODEN // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ func getData() { env.ENV_FILE_NAME = DATA_ENV data.expr = env.ReadEnvKey("expr") s := env.ReadEnvKey("interpretation") utils.JsonToArrayOfStrings(s, &data.interpretation) } func getResults(tree syntaxbaum.SyntaxBaum) resultsType { ch1 := make(chan int) ch2 := make(chan []string) ch3 := make(chan int) ch4 := make(chan int) ch5 := make(chan int) go rekursion.RekursivEval(ch1, tree, data.interpretation) go rekursion.RekursivAtoms(ch2, tree) go rekursion.RekursivDepth(ch3, tree) go rekursion.RekursivLength(ch4, tree) go rekursion.RekursivParentheses(ch5, tree) // Methoden ausführen: return resultsType{ eval: <-ch1, atoms: <-ch2, depth: <-ch3, length: <-ch4, nParentheses: <-ch5, } } func displayResults(tree syntaxbaum.SyntaxBaum, results resultsType) { fmt.Println(fmt.Sprintf( dedent.Dedent(` Syntaxbaum von F := %[1]s: %[2]s Für I = {%[3]s} und F wie oben gilt eval(F, I) = %[4]d; atoms(F) = {%[5]s}; <- * depth(F) = %[6]d; <- * length(F) = %[7]d; <- * #parentheses(F) = %[8]d; <- * * noch nicht implementiert! Challenge: schreibe diese Methoden! (siehe README.md) `), tree.GetExpr(), tree.Pretty(" "), strings.Join(data.interpretation, ", "), results.eval, // string(results.atoms), strings.Join(results.atoms, ", "), results.depth, results.length, results.nParentheses, )) }