Zamiana liczby słownej na ciąg cyfr.
Ostatnio zmodyfikowano 2013-04-01 23:47
pekfos |
» 2013-04-01 20:22:19 Monika90: Tu nie dajemy gotowców. Jak chcesz pomóc, to, na przykład, wytłumacz działanie algorytmu. Dać kod, którego autor tematu nie potrafi nawet skompilować, to żadna pomoc. |
|
Monika90 |
» 2013-04-01 21:47:03 Program się kompiluje w clang 3.2, gcc 4.6.3, gcc 4.7.2, gcc 4.8.0, ale trzeba włączyć tryb C++11.
Idea programu polega na tym, że z małych prostych parserów buduje się większe, a z nich jeszcze większe, itd. Każdy parser to funkcja, której argumentem jest strumien symboli (tutaj para iteratorów). Każda funkcja sprawdza czy może sparsować symbole, które są na wejściu, jeżeli tak, to pobiera je z wejścia (przesuwa iterator do przodu), tworzy na ich podstawie jakąś wartość (która trafia do zmiennej value) i zwraca true, w przeciwnym wypadku nic nie robi i zwraca false. Dzięki temu parser nadrzędny może spróbowac czegoś innego gdy parserowi podrzędnemu parsowanie się nie uda.
Sugeruję zapoznać się z parserem zwanym Recursive Descent Parser, używanym między innymi do parsowania wyrażeń arytmetycznych. Jego przykładową implementację można znaleźć w książce "Język Programowania C++" Bjarne Stroustrupa. Jak zrozumiesz Recursive Descent Parser, to zrozumiesz też program który zamieściłam, z tym że musisz też znać C++. |
|
DejaVu |
» 2013-04-01 23:47:37 @pekfos: akurat ten kod nie jest banalny, więc raczej trzeba znać dobrze C++ żeby go zrozumieć :) Mi się podoba sam fakt, że kod został oparty o standard C++11 :) |
|
1 « 2 » |