from tree import Tree
'''
Aufgabe 1: Shift-Reduce-Parser

Format fuer Regeln: Liste [('LHS', ['RHS1', 'RHS2', ....])] - 
(unvollstaendiges) Bsp.: [('S', ['NP', 'VP']), ('Det', ['das'])]  

Format fuer Saetze: Liste von Woertern - Bsp.: ['der', 'Student', 'liest']
'''


def shift(stack, item):
    # Das ist der Code aus der VL - anpassen!
    return ([sentence[0]] + stack, sentence[1:])
    
def reduce(stack, lhs, lenrhs):
    # Das ist der Code aus der VL - anpassen!
    return ([lhs] + stack[len(rhs):], sentence)

def matches(stack, rhs):
    # Das ist der Code aus der VL - anpassen!
    if len(stack) < len(rhs):
        return False
    for (s, r) in zip(stack, reversed(rhs)):
        if s != r:
            return False
    return True

# Aufgabe 1
def parse(sentence, rules):
    # Parsebaeume berechnen
    yield None


