Hier gibt es eine Delphiübersetzung von Lex/Yack
http://delphiwiki.de/wiki/index.php?title=SRLexYacc
Bei Ausdrücken wie 2ab hast du das Problem, dass er nicht eindeutig ist, es sein denn du lässt nur einstellige Variblennamen zu. In dem Beispiel könntest du die Variablen a, b, ab haben und falls Variablen auch mit Zahlen beginnen dürften auch noch 2ab.
Wenn du das an Parser deligieren willst, musst du aber wissen, dass es sich um mehrere Tokens handelt und das geht in dem fall nur mit einstelligen Tokens und somit auch nur mit einstelligen Bezeichnern. Damit ist auch eine Verwendung von "++" beispielsweise ausgeschlossen.