master > master: allgemeine Aufräumung
This commit is contained in:
@@ -5,21 +5,9 @@
|
||||
# IMPORTS
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
from __future__ import annotations
|
||||
from lark import Tree;
|
||||
from typing import List;
|
||||
|
||||
from aussagenlogik.schema import isAtom;
|
||||
from aussagenlogik.schema import isBeliebig;
|
||||
from aussagenlogik.schema import isTrueSymbol;
|
||||
from aussagenlogik.schema import isFalseSymbol;
|
||||
from aussagenlogik.schema import isNegation;
|
||||
from aussagenlogik.schema import isConjunction;
|
||||
from aussagenlogik.schema import isLongConjunction;
|
||||
from aussagenlogik.schema import isDisjunction;
|
||||
from aussagenlogik.schema import isLongDisjunction;
|
||||
from aussagenlogik.schema import isImplication;
|
||||
from aussagenlogik.schema import SyntaxBaum;
|
||||
from aussagenlogik.syntaxbaum import SyntaxBaum;
|
||||
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# GLOBALE KONSTANTEN
|
||||
@@ -31,53 +19,69 @@ from aussagenlogik.schema import SyntaxBaum;
|
||||
# METHODEN
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
def rekursiv_eval(fml: SyntaxBaum, I: List[str]) -> int:
|
||||
def rekursivEval(fml: SyntaxBaum, I: List[str]) -> int:
|
||||
subfml = fml.children;
|
||||
if isAtom(fml):
|
||||
########
|
||||
# FÄLLE AUS DER VORLESUNG
|
||||
########
|
||||
# Fall Atom
|
||||
if fml.isAtom():
|
||||
name = fml.expr;
|
||||
return 1 if (name in I) else 0;
|
||||
if isBeliebig(fml):
|
||||
name = fml.expr;
|
||||
return 1 if (name in I) else 0;
|
||||
elif isTrueSymbol(fml):
|
||||
return 1;
|
||||
elif isFalseSymbol(fml):
|
||||
return 0;
|
||||
elif isNegation(fml):
|
||||
val0 = rekursiv_eval(subfml[0], I);
|
||||
# Fall ¬F
|
||||
elif fml.isNegation():
|
||||
val0 = rekursivEval(subfml[0], I);
|
||||
return 1 - val0;
|
||||
elif isConjunction(fml):
|
||||
val0 = rekursiv_eval(subfml[0], I);
|
||||
val1 = rekursiv_eval(subfml[1], I);
|
||||
# Fall F1 ⋀ F2
|
||||
elif fml.isConjunction2():
|
||||
val0 = rekursivEval(subfml[0], I);
|
||||
val1 = rekursivEval(subfml[1], I);
|
||||
return min(val0, val1);
|
||||
elif isLongConjunction(fml):
|
||||
values = [rekursiv_eval(t, I) for t in subfml];
|
||||
return min(values);
|
||||
elif isDisjunction(fml):
|
||||
val0 = rekursiv_eval(subfml[0], I);
|
||||
val1 = rekursiv_eval(subfml[1], I);
|
||||
# Fall F1 ⋁ F2
|
||||
elif fml.isDisjunction2():
|
||||
val0 = rekursivEval(subfml[0], I);
|
||||
val1 = rekursivEval(subfml[1], I);
|
||||
return max(val0, val1);
|
||||
elif isLongDisjunction(fml):
|
||||
values = [rekursiv_eval(t, I) for t in subfml];
|
||||
return max(values);
|
||||
elif isImplication(fml):
|
||||
val0 = rekursiv_eval(subfml[0], I);
|
||||
val1 = rekursiv_eval(subfml[1], I);
|
||||
########
|
||||
# WEITERE FÄLLE NICHT IN VORLESUNG
|
||||
########
|
||||
# Sonderfall: generische Formel als Variable
|
||||
if fml.isGeneric():
|
||||
name = fml.expr;
|
||||
return 1 if (name in I) else 0;
|
||||
# Sonderfall: Tautologiesymbol
|
||||
elif fml.isTautologySymbol():
|
||||
return 1;
|
||||
# Sonderfall: Kontradiktionssymbol
|
||||
elif fml.isContradictionSymbol():
|
||||
return 0;
|
||||
# Fall Implikation: F1 ⟶ F2
|
||||
elif fml.isImplication():
|
||||
val0 = rekursivEval(subfml[0], I);
|
||||
val1 = rekursivEval(subfml[1], I);
|
||||
return 0 if val0 == 1 and val1 == 0 else 1;
|
||||
# Fall F1 ⋀ F2 ⋀ ... ⋀ Fn
|
||||
elif fml.isConjunction():
|
||||
values = [rekursivEval(t, I) for t in subfml];
|
||||
return min(values);
|
||||
# Fall F1 ⋁ F2 ⋁ ... ⋁ Fn
|
||||
elif fml.isDisjunction():
|
||||
values = [rekursivEval(t, I) for t in subfml];
|
||||
return max(values);
|
||||
raise Exception('Evaluation nicht möglich!');
|
||||
|
||||
def rekursiv_atoms(fml: Tree) -> List[str]:
|
||||
def rekursivAtoms(fml: SyntaxBaum) -> List[str]:
|
||||
## Herausforderung: schreibe diese Funktion!
|
||||
return [];
|
||||
|
||||
def rekursiv_depth(fml: Tree) -> int:
|
||||
def rekursivDepth(fml: SyntaxBaum) -> int:
|
||||
## Herausforderung: schreibe diese Funktion!
|
||||
return 0;
|
||||
|
||||
def rekursiv_length(fml: Tree) -> int:
|
||||
def rekursivLength(fml: SyntaxBaum) -> int:
|
||||
## Herausforderung: schreibe diese Funktion!
|
||||
return 0;
|
||||
|
||||
def rekursiv_parentheses(fml: Tree) -> int:
|
||||
def rekursivParentheses(fml: SyntaxBaum) -> int:
|
||||
## Herausforderung: schreibe diese Funktion!
|
||||
return 0
|
||||
|
||||
Reference in New Issue
Block a user