Tzn.. parser to gotowa działająca rzecz służąca do... parsowania, a ONP to sposób zapisu wyrażenia (ułatwiający implementacje interpretera ze względu na możliwość pominięcia priorytetów czy nawiasów). Na ONP konwertuje się z tradycyjnej notacji, żeby łatwiej można było podejść do interpretacji, a user mógł napisać wyrażenie tradycyjnie. W podlinkowanym przez ciebie artykule (zatytułowany przez ciebie jako "Parser") ten krok jest zupełnie pominięty (przynajmniej na pierwszych kilku stronach nie widziałem) - po prostu w kodzie na sztywno zakodowane jest jakieś wyrażenie w postaci drzewa mniejszych wyrażeń. ONP mogłoby by ci posłużyć do przekonwertowania wyrażenia podanego przez usera (prawdopodobnie string) na takie drzewo (z reguły to jest lista czy ew. tablica, ale nic nie stoi na przeszkodzie, żeby tworzyć takie drzewo).
Więc odpowiadając na twoje pytanie "co lepiej stosować?": obydwa. Dwa wrzucone przez ciebie linki przedstawiają dwie części pełnego interpretera (zdolnego do zinterpretowania inputu usera, a nie tylko zakodowanego drzewa wyrażeń). Właściwie to nieadekwatnie podpisałeś linki - pierwszy link to jest interpreter, a algorytm ONP właśnie służy do parsowania.