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() + ')'