Dziś jest piątek, 22 sierpnia 2008 roku (z kalendarza...)

Nowy kompilator

Icon

16.06.2005, 16:30

Webmaster

Komentarze (1)

Powrót

Zrobiłem przedwczoraj przymiarkę pod komponenty w kompilatorze OPT. Stworzyłem odpowiednie struktury i doszedłem do wniosku, że kompilacja liniowa nie za bardzo się do tego nadaje. Najważniejsze jest to, że przetwarzana instrukcja nijak nie mogła sprawdzić, jakie elementy znajdują się wewnątrz niej, że o wpłynięciu na kolejność ich przetwarzania nie wspomnę.

Problem powinna tu rozwiązać odmienna architektura kompilatora. Zamiast przetwarzania liniowego zdecydowałem się wprowadzić coś w rodzaju drzewa. Instrukcje zostaną teraz zapisane jako obiekty, a nie funkcje, sam OPT natomiast będzie w stanie rozpoznać komendy blokowe w stylu {section}...{/section}. Wszystko zawarte między nimi kompilator zapisze jako podwęzły tej instrukcji, która w dodatku będzie mogła sprawdzić, co tam się zawiera i zrobić inne fajne rzeczy. Tak to się w skrócie przedstawia.

Zastanawiam się, jak to wpłynie na szybkość, bowiem na oko cały proces lekko się wydłuży. Najpierw ciąg tekstu należy rozbić na drzewo, a później to drzewo "uruchomić", generując drugi ciąg :). Największym wyzwaniem są wyrażenia regularne. We wstępnym teście ułożyłem coś takiego: #(\{(\/?)(.*?)\}|{\*.+\*\}|(.?))#si. W zamyśle ma ono dzielić szablon na znaczniki OPT oraz zwyczajny tekst, zwracając je w kolejności występowania. Znaczniki, owszem, zwracane są w całości, lecz tekst idzie znak po znaku. Zapytanie generuje także odrobinę za dużo danych i nie idzie tego wyłączyć. Zaraz po otrzymaniu wyniku sporą ich część muszę kasować poleceniem unset(), by w trakcie kompilacji przypadkiem nie dostać "Limit pamięci przekroczony". Jeżeli ktoś byłby w stanie podsunąć mi konkretną wskazówkę, byłbym wdzięczny.

Powrót

Komentarze

Napisał NuLL w czwartek, 16 czerwca 2005 o 18:40

Również jestem ciekaw rozwiązania - ja się przmierzam do pisania systemu szablonów dla mojego CMF-a - o ile sam kompilator napisać to małe wyzwanie to napisanie czegoś działa porządnie jest naprwde trudne. Pozatym zadziwia mnie jak dzaiła preg_replace_callback :-( wracajac 2x za dużo wpisów.

Strona 1 z 1 :: 1

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2008 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia