Dziś jest piątek, 21 listopada 2008 roku (z kalendarza...)

Teraz wyrażenia

Icon

28.11.2005, 07:50

Webmaster

Komentarze (0)

Powrót

W przeciągu ostatnich dni napłynęły dwa raporty o błędach w kompilatorze wyrażeń w OPT. Zdołowany zaśmieceniem i nieudolnością dotychczasowego algorytmu zacząłem przepisywać go od nowa.

Jeśli chodzi o interpretację składni, zmian jest niewiele. Zablokowałem możliwość tworzenia zmiennych indeksów tablic w "sekcyjnym" sposobie odwoływania się do nich: $alala.pleple.$i.most, gdyż pewnie i tak mało kto z tego korzystał. Sama możliwość $alala.pleple pozostała, lecz jest teraz traktowana jako całość, a nie rozbijana względem kropki. Dzięki temu znacznie łatwiej się wszystko parsuje. Kolejną nowością będzie zezwolenie na użycie ciągów ograniczonych pojedynczą apostrofą :)). Tyle, jeśli chodzi o samą składnię, przejdźmy do działania.

Tu zmiany są spore, bowiem nowy kompilator wyposażyłem w umiejętność analizy tego, co parsuje. Dzięki temu wychwytuje nieprawidłowe odwołania (np. dwa operatory po sobie, otwieranie czegoś nie tam, gdzie trzeba itd.), zanim jeszcze dobierze się do tego PHP. Mam nadzieję zredukować do absolutnego minimum liczbę komunikatów Parse error in eval'd code, zamiast których zgłaszane będą wyjątki, np. Unexpected token: OPCODE_FUNCTION (lower) in expression $parara->eq+"fff"lower("mamama","delee")+6 (przed wywołaniem funkcji powinien stać operator). A jako, że rodzaj poprzedniego tokenu jest identyfikowany za pomocą ogólnikowych stałych w stylu OPCODE_OPERATOR, możliwe stało się też podniesienie inteligencji kompilatora. Otóż już potrafi on rozróżnić, kiedy słowo kluczowe "add" jest operatorem, kiedy zwykłym ciągiem, a kiedy nazwą pola/metody w obiekcie.

Ogólnie całość prezentuje się już teraz nadzwyczaj dobrze. Przede mną jeszcze najtrudniejsze z zadań: detekcja, kiedy operator przypisania traci sens, ponieważ po lewej stronie nie mamy zmiennej. Jest to dość skomplikowane zagadnienie. W teorii mógłbym zabronić po prostu używania operatorów, ale dajmy na to sobie taką zmienną:

$aaa[$i+5] = 52+$b;
Do takiego czegoś przecież można sobie przypisywać wartości, ponieważ operator jest w nawiasie kwadratowym, który czyni go de facto częścią zmiennej. Co ciekawsze, w środku także może być operator przypisania. Ale nie martwcie się o to, już moja w tym głowa, by to funkcjonowało na poziomie :).

Powrót

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ń: 1 | Serwer wirtualny zapewnia