Mercurial > lbo > hg > arith
view arith/tree.py @ 0:e85652916197 draft
Initial commit
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Fri, 17 May 2019 22:28:13 +0200 |
parents | |
children |
line wrap: on
line source
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Fri May 17 21:53:30 2019 @author: lbo """ class Node: left = None right = None typ = '' def __init__(self, left=None, right=None): self.left = left self.right = right def traverse(self): if not self: return '' return (self.left.traverse() + ' ' if self.left else '') + self.repr() + (' ' + self.right.traverse() if self.right else '') def __repr__(self): return self.repr() class Symbol(Node): SYMBOL = '<symbol>' typ = SYMBOL c = '' def __init__(self, sym): self.c = sym def repr(self): return self.c class Value(Node): VALUE = '<value>' typ = VALUE v = None def __init__(self, v): self.v = v def repr(self): return str(self.v) class Term(Node): MINUS = '-' PLUS = '+' typ = PLUS def __init__(self, *args): Node.__init__(self, *args) def repr(self): return '(' + self.left.repr() + self.typ + self.right.repr() + ')' class Product(Node): PROD = '*' QUOT = '/' typ = PROD def __init__(self, *args): Node.__init__(self, *args) def repr(self): return '(' + self.left.repr() + self.typ + self.right.repr() + ')' class Power(Node): POWER = '^' typ = POWER def __init__(self, *args): Node.__init__(self, *args) def repr(self): return '(' + self.left.repr() + '^' + self.right.repr() + ')'