remu-operator

A framework to separate resolution of operator precedence and associativity from parsing time


Keywords
compiler, operator, precedence, associativity, resolver, operator-associativity, operator-precedence
License
MIT
Install
pip install remu-operator==1.0.1

Documentation

Remu-Operator

This is framework to separate the resolution of operator precedence and associativity from parsing time, by using a concise algorithm instead of Shunting Yard algorithm.

Taine Zhao is the author of this algorithm, and has named it "Operator Bubbling".

from remu_operator import Operator, binop_reduce

precedences = {
    '+': 1,
    '*': 2,
    "^": 3,
}

left = False
right = True

associativities = {'+': left, '*': left, '^': right}


def cons(v):
    return lambda l, r: '({} {} {})'.format(l, v, r)


x = binop_reduce(
    cons,
    [1, Operator("+"), 2,
     Operator("*"), 3, Operator("^"), 4,
     Operator("^"), 5, Operator("+"), 6,
     Operator("*"), 7], precedences, associativities)

assert x == '((1 + (2 * (3 ^ (4 ^ 5)))) + (6 * 7))'