Wenn du es ganz sauber machen willst, verwendest du lex und yacc -> siehe Google.
Wenn das Overkill ist, muss du Zeichen für Zeichen durchgehen, und zuerst eine Liste der Tokens (Zahl, Variable und Operator) erstellen.
Anschließend musst du die Liste unter Beachtung der Operator-Präzedenz (* vor +) in einen Baum umwandeln.
YACC ist gar nicht nötig, (f)lex reicht da schon völlig aus
Selber schreiben würde ich das nicht (jedenfalls wenn man schon grundlegende Ahnung von regulären Ausdrücken hat), mit flex ist das in 10Zeilen erledigt