12.07.2015 Views

Logik und Logische Programmierung Einführung

Logik und Logische Programmierung Einführung

Logik und Logische Programmierung Einführung

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Evaluator.javapackage de.jastram.truthtable;import java.util.Map;importjava.util.NoSuchElementException;import java.util.Stack;importde.jastram.truthtable.analysis.DepthFirstAdapter;importde.jastram.truthtable.node.AAndExpr;importde.jastram.truthtable.node.ANegTerm;importde.jastram.truthtable.node.AOrExpr;importde.jastram.truthtable.node.Start;import de.jastram.truthtable.node.TId;/** *This Visitor Evaluates an AST for a Set of given values. */public classEvaluator extends DepthFirstAdapter { !private Stack stack = newStack(); !private Map values; !publicboolean evaluate(Start ast, Map values) { !!this.values = values; ! !ast.apply(this);! !return stack.pop(); !} !@Override!public void caseTId(TId node) { ! !Booleanvalue = values.get(node.getText()); ! !if (value == null)! ! !throw new NoSuchElementException("Don'tknow id: " + node); ! !stack.push(value); !!super.caseTId(node); !} !@Override !public voidcaseANegTerm(ANegTerm node) { ! !super.caseANegTerm(node);! !boolean value = stack.pop(); !!stack.push(!value); !} !!!@Override !public void caseAAndExpr(AAndExpr node) { !!super.caseAAndExpr(node); !!boolean value1 = stack.pop();! !boolean value2 = stack.pop();! !stack.push(value1 & value2);!} @Override !public voidcaseAOrExpr(AOrExpr node) { !!super.caseAOrExpr(node); !!boolean value1 = stack.pop();! !boolean value2 = stack.pop();! !stack.push(value1 | value2);!}}!Where are the logic laws ?

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!