Pewną "niedogodnością" wymiany kompilatora jest konieczność przepisania wszystkich dotychczasowych instrukcji, bowiem radykalnie zmienił się sposób ich działania. Instrukcje są teraz węzłami drzewa, a żeby łatwiej to się reprezentowało, powinny być zawarte w klasach pochodnych od opt_instruction, która z kolei pochodzi od opt_node. Żeby było ciekawiej, w jednej takiej klasie może być zawartych kilka instrukcji, lecz to nie OPT odpala metody do każdej z nich. Ba... czegoś takiego nawet nie ma :). Do obiektu-węzła trafiają po prostu same informacje o instrukcjach, jakie do niego znaleziono, oraz przy okazji o podelementach każdej z nich. Tu mój parser jest lepszy nawet od XML'a, gdyż obsługuje złożone zagnieżdżenia w stylu if ... elseif ... else ... endif bez rozbijania tego na podwęzły. Teraz, gdy drzewo jest gotowe, odpalana jest metoda process() węzła głównego, która odpala podobne metody w węzłach podrzędnych, te odpalają jeszcze niżej itd. To właśnie poprzez nadpisanie domyślnej ich treści instrukcje mogą decydować, co zrobić z otrzymanymi danymi, a nawet - w jakiej kolejności przetworzyć instrukcje wraz z podelementami. Teoretycznie można nawet napisać wariację if'a, która nie będzie się rzucała, gdy else znajdzie się przed elseif :). Metoda process() ułożyłaby wszystko, jak trzeba i kod PHP wyszedłby już tak, powinien :).






Napisał eXtreme w wtorek, 21 czerwca 2005 o 11:31
Zagmatwane strasznie, ale jak widzę się sprawdza. :)