Ich weiß nicht, ob ich es ganz richtig verstanden habe, aber ich bin der Meinung, dass ein Operator immer die gleiche Priorität haben sollte, unabhängig von den Datentypen. Sonst wird es nämlich nicht nur haarig zu implementieren, sondern auch irgendwann schwer nachzuvollziehen. Außerdem erschließt sich mir der Sinn nicht wirklich, die Priorität vom Datentyp abhängig zu machen; ich kenne auch keine dynamisch typisierte Sprache, die das so macht.
Wenn man es so macht, dass ein Operator immer die gleiche Priorität hat, ist es doch eigentlich einfach: Beim Parsen kümmert man sich erst mal gar nicht um die Datentypen sondern baut erst mal nur einen abstrakten Baum auf. Im nächsten Schritt arbeitet man diesen dann ab, und beachtet dabei die Typen. Das geht im einfachsten Fall mit einer case-Anweisung und damit in konstanter Laufzeit.
Edit:
Noch mal bezüglich:
Zitat:
1 Op Op Op 1 = (((1 Op) Op) Op 1) oder (1 Op (Op (Op 1))) oder ((1 Op) Op (Op 1))
Und dummerweise entstehen auch Möglichkeiten wie:
(1 Op) (Op (Op 1)) die dann zu einem Fehler führen
Das eine nennt man linksassoziativ und das andere rechtsassoziativ. Das ist auch wieder eine reine Frage der Definition, genau wie die Operatorenrangfolge. In der Mathematik sind z.B. Subtraktion und Division linksassoziativ, aber Potenzen rechtsassoziativ.