Tworzę swój "jezyk skryptowy" w C++, wszystkie operacje maja działać tak ja to się dzieję w C++. Do przetwarzania wyrażeń arytmetycznych używam klasycznego ONP, które w swojej postawowej implementajcji pomijają różnicę miedzy wiązaniem prawostronnym, a lewostronnym i operatory jednoargumentowe. O ile wpadłem na pomysł co zrobić, by działały operatory o dowolnym wiązaniu, to nie mogę poradzić sobie z obsługą operatorów jednoargumentowych.
Jak powinienem obslugiwać operatory jednoargumentowe(unarny minus, negacja itd.)?
Rożnica powinna być już na etapie konwersji, czy dopiero w trakcie obliczania?
Nie twórz parsera opartego o ONP (przechodziłem przez to i, uwierz mi, boli bardzo w późniejszych etapach) - zapoznaj się z np. z bison
em, flex
em lub poczytaj o innych metodach tworzenia parserów.
W zasadzie to ja muszę z "wyjątków" okodować tylko "=", unarny minus oraz negację, więc wydaję mi się, że ONP powinno być wystrczającym narzędziem?
Teraz moim głównym problemem jest impemetacja poprawnej obsługi właśnie operatorów jednoargumentowych
więc wydaję mi się, że ONP powinno być wystrczającym narzędziem?
Skoro chcesz się na własnej skórze przekonać, że jest zupełnie na odwrót, proszę bardzo ;-)
http://stackoverflow.com/questions/2431863/infix-to-postfix-and-unary-binary-operators
Patryk27 napisał(a):
więc wydaję mi się, że ONP powinno być wystrczającym narzędziem?
Skoro chcesz się na własnej skórze przekonać, że jest zupełnie na odwrót, proszę bardzo ;-)
http://stackoverflow.com/questions/2431863/infix-to-postfix-and-unary-binary-operators
Dziękuję bardzo.
Projekt na studia. Nie możemy korzystać z STL, ani nawet z klasy string, więc użycie gotowego parsera wiązałoby się z automatycznym oblaniem przedmiotu. Nasze prace sprawdzane są antyplagiatem.
Taki bardzo stary przykład dołaczany do kompilatora z połowy lat 90, więc archaiczny c++ - w zasadzie C z klasami http://kaczus.republika.pl/izv/parser.lha Parser do funkcji z jedna niewiadomą....