master > master: codego initialisiert
This commit is contained in:
95
codego/main.go
Normal file
95
codego/main.go
Normal file
@@ -0,0 +1,95 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"logik/aussagenlogik/rekursion"
|
||||
"logik/aussagenlogik/schema"
|
||||
"logik/aussagenlogik/syntaxbaum"
|
||||
env "logik/core/environment"
|
||||
"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
|
||||
err := getData()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
// Ausdruck -> Syntaxbaum
|
||||
tree, err := schema.ParseExpr(data.expr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
// Methoden ausführen:
|
||||
results := resultsType{
|
||||
eval: rekursion.RekursivEval(tree, data.interpretation),
|
||||
atoms: rekursion.RekursivAtoms(tree),
|
||||
depth: rekursion.RekursivDepth(tree),
|
||||
length: rekursion.RekursivLength(tree),
|
||||
nParentheses: rekursion.RekursivParentheses(tree),
|
||||
}
|
||||
// Resultate anzeigen:
|
||||
displayResults(tree, results)
|
||||
}
|
||||
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// SONSTIGE METHODEN
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
func getData() error {
|
||||
env.ENV_FILE_NAME = DATA_ENV
|
||||
data.expr = env.ReadEnvKey("expr")
|
||||
s := env.ReadEnvKey("interpretation")
|
||||
err := json.Unmarshal([]byte(s), &data.interpretation)
|
||||
return err
|
||||
}
|
||||
|
||||
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.Expr,
|
||||
tree.Pretty(" "),
|
||||
strings.Join(data.interpretation, ", "),
|
||||
results.eval,
|
||||
// string(results.atoms),
|
||||
strings.Join(results.atoms, ", "),
|
||||
results.depth,
|
||||
results.length,
|
||||
results.nParentheses,
|
||||
))
|
||||
}
|
||||
Reference in New Issue
Block a user