Also, für eine Parser ist das doch sehr einfach:
Code:
<Term><Op><Term>
<Term> ::= <OptionalSign><Term> | <Constant>
Ergo ist das 1. '-' ein Operator und alles was danach folgt, ein Vorzeichen. Der Tokenizer liefert eh nur 'OpMinus' und weiß nicht (und ist ihm auch egal), ob es sich um ein Vorzeichen oder einen Operator handelt.
Anders als bei '--' und '++' Operatoren, da macht der Tokenizer ein Lookahead, weswegen 'a---b' funktioniert (und kompiliert), aber 'a----b' nicht (Syntaxfehler).
Zurück zum Thema: Definiere deine Sprache einfach so, wie Du es gerne hättest, denn ein Parser -richtig programmiert- setzt nur die Grammatik um. Verwende keine eigenen Gedanken, dann hast Du auch keine Probleme mit dem Teil.