1.1 --- a/smm.py Tue May 17 02:19:11 2011 +0200
1.2 +++ b/smm.py Tue May 17 03:38:02 2011 +0200
1.3 @@ -8,6 +8,41 @@
1.4 import re
1.5 import token
1.6
1.7 +def main():
1.8 + args = parse_arguments()
1.9 + scanner = Scanner(TOKENS)
1.10 + parser = Parser(SYNTAX, scanner)
1.11 + #(accepted, out, tree_nodes) = parser.parse(args.formula)
1.12 + #tree = SyntaxTree(out, tree_nodes)
1.13 + #print tree.root
1.14 + p = Variable(["p"])
1.15 + q = Variable(["q"])
1.16 + r = Variable(["r"])
1.17 + formula = Imp([Eq([p, q]), r])
1.18 + formula = Not([Or([p, q])])
1.19 + formula = Not([Not([p])])
1.20 + print formula
1.21 + print "reduced"
1.22 + print reduce(formula)
1.23 +
1.24 +
1.25 +def reduce(formula):
1.26 + print formula
1.27 + map = {IMP: lambda (a, b): Or([Not([a]), b]),
1.28 + EQ: lambda (a, b): And([Or([Not([a]), b]), Or([a, Not([b])])]),
1.29 + NOT: lambda (a,): isinstance(a, Operator) and a.__class__([Not([v]) for v in a.values] or Not([a])),
1.30 + AND: lambda (a, b): And([a, b]),
1.31 + OR: lambda (a, b): Or([a, b]),
1.32 + VARIABLE: lambda (v,): v}
1.33 + def values():
1.34 + return [reduce(v) for v in formula.values]
1.35 +
1.36 + if not isinstance(formula, Operator) or formula.id not in map:
1.37 + return formula
1.38 + return map[formula.id](values())
1.39 +
1.40 +
1.41 +
1.42 NOT = "~"
1.43 AND = "&"
1.44 OR = "|"
1.45 @@ -276,15 +311,6 @@
1.46 table.append(node)
1.47 unfinished.pop()
1.48 return table[0]
1.49 -
1.50 -
1.51 -def main():
1.52 - args = parse_arguments()
1.53 - scanner = Scanner(TOKENS)
1.54 - parser = Parser(SYNTAX, scanner)
1.55 - (accepted, out, tree_nodes) = parser.parse(args.formula)
1.56 - tree = SyntaxTree(out, tree_nodes)
1.57 - #print tree.root
1.58
1.59 from argparse import ArgumentParser
1.60