Aber im Falle von a+-b wird das - zu b zugeordnet, hier würde ich dei Begründung mit den Parametern noch akzeptieren.
Für den Ausdruck "a+-b" kannst du auch wieder versuchen, einen Syntaxbaum mit Hilfe der Präzedenztabelle aufzubauen.
Starten wir mal wieder bei dem "a". Das kann ja die linke Seite für zumindest noch binäre Operatoren werden. Also gehen wir weiter.
"a+". Das erste Plus ist hier wieder die (11), also der binäre Additionsoperator. Also suchen wir jetzt die Bedeutung des rechten Operanden.
Wir müssen hier wieder ab mindestens der Präzedenz des Operators starten, dessen rechten Operanden wir finden wollen, also mindestens bei 11.
Hier sehen wir jetzt das "-" Minus. Da wir noch keinen linken Operanden für einen solchen "-" Operator haben (wir suchen ja einen komplett neuen Ausdruck als rechten Operanden des ersten "+" Operator), muss es sich hierbei um das unäre Minus handeln. Also suchen wir jetzt noch den einzigen Operanden dafür (auch wieder gestartet bei mindestens der Präzedenz des unären Minus.
Aber warum wird bei a++-b+k das minus zwischen a++ und b als unaray gewertet? Habe doch hier nur einen Operator und zwar b das a++ zählt ja eig. nicht mehr oder?
Um das hier richtig zu parsen, müssen wir noch wissen, dass Operatoren vom Tokenizer/Lexer immer als längstmöglicher Match zum Parser ausgegeben werden. Das "++" hinter dem "a" ist also ein "++" und keine zweimal "+". Das heißt, hier ist es ein Postinkrement.
Explizit geklammert ist es also: ((a++) - b) + k
Das Minus zwischen a++ und b ist also _nicht_ der unäre "-" Operator, sondern der binäre.
EDIT: Übrigens, wenn du nach genau diesem Schema vorgehst, dann tust du das, was auch ein "recursive descent parser" tun würde. Da du dir im Falle von Javas arithmetischen Ausdrücken auch immer nur das nächste Zeichen anzuschauen brauchst, um zu entscheiden, welche Grammatikregel bzw. welcher Operator Anwendung findet, und den Inputstream von links nach rechts durchgehen kannst, ist das eine LL(1) Grammatik und recursive descent parser können LL(1) bzw. generell LL(k) Grammatiken erkennen. Das "Beheben" von rechts-nach-links Assoziativitäten einzelner Operatoren kann man in einem einfachen post-processing Schritt im Syntaxbaum beheben.