Jakem zaczął tutaj:
http://4programmers.net/Forum/PHP/222670-php_framework_-_szablony
Zabrałem się po trochu do roboty i część udało mi się wymodzić. Postanowiłem zrobić 3 wersje - Fast, release, debug. Fast bez żadnego sprawdzania błędów (chodzi tu o błędy składni szablonu), Release - wyłapujące krytyczne błędy i w razie czego nie wyświetlające całego szablonu (lub pojedynczej jego sekcji - wykrywanie uszkodzonych plików z przyczyn zewnętrznych), i Debug - Parsująca nawet składnie HTML - ostrzega o niedomkniętych tagach etc.
Ponieważ zależy mi na szybkim zobaczeniu efektów i zmierzeniu wydajności zaczynam oczywiście od wersji fast :). Co mam?
Wyłapywanie tagów - banał na 5min. Lecę po pliku byte by byte i szukam znaku '<'. Pomijam białe znaki i wczytuje słowo. Mam tag. Jeśli to nie mój (switch), to lecę dalej. Jeśli mój to robię: DoNapotkania('>'){pomiń białe znaki, wczytaj słowo, pomiń białe znaki, wczytaj znak '=', skipws, wczytaj słowo/stringa.}
Jest super. Mam tagi, i ich atrybuty. Czas na najprostszą w świecie instrukcje. If. Cikawe jest to, że wbrew pozorom realizacja pętli for byłaby łatwiejsza. W If'ie muszę parsować warunek. Musiałem napisać najprostszy na świecie parser wyrażeń ONP. Algorytm zwrotnicy - nic nadzwyczajnego. Oczywiście operacje wykonywane są w czasie rzeczywistym. Kilka szybkich testów, najdziwniejsze wyrażenia - parser działa. Zadanie na jutro? Dodać mu umiejętność rozpoznawania zmiennych i podmieniania ich w czasie rzeczywistym. Skończyć if'a i zająć się resztą atrybutów. :)
@ŁF: Parsery wyrażeń matematycznych jakie widziałem, kiedy się interesowałem tematem najpierw konwertowały wyrażenie do ONP, a później je liczyły. Zmodyfikowałem algorytm, aby obliczał wartość wyrażenia od razu w czasie konwersji. :)
Różnica między IsKeyDown (isKeyPressed()) a keypressed w sfml
Różnica między IsKeyDown (isKeyPressed()) a keypressed w sfml
c++ Odczytywanie z otwartego pliku
c++ ifstream c_str in.get
c++ ifstream c_str in.get
c++ Odczytywanie z otwartego pliku
Funkcja sredniej tablice
Funkcja sredniej tablice
Wyświetlanie tablicy w osobnej procedurze
zen parser
Co to są "operacje wykonywane w czasie rzeczywistym", kiedy robisz to na systemie w najlepszym razie łagodnego czasu rzeczywistego?