-
1. Data: 2010-09-01 21:37:13
Temat: Resolve'ing identyfikatorów
Od: "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl>
Witam!
Projektuję interpreter wyrażeń matematycznych. Chcę zrealizować go
kilkuetapowo - najpierw wyrażenie będzie tłumaczone do drzewa
składniowego, potem do drzewa wyrażenia, a na końcu drzewo wyrażenia
rekurencyjnie będzie obliczane.
Etap konwersji drzewa składniowego (zawierającego - z grubsza - głównie
tokeny) chcę zrealizować rekurencyjnie: każdy węzeł drzewa wygeneruje
odpowiednie poddrzewo wyrażenia, dokonując w razie potrzeb odpowiednich
przekształceń czy dodatkowych operacji.
Jeśli powyższy opis nie jest dostatecznie czytelny, proponuję zerknąć do
przykładu:
www.spook.freshsite.pl/Temporary/Interpreter.png
Moje pytanie brzmi: na którym etapie przetwarzania powinno dojść do
stwierdzenia czy dany identyfikator (np. x) jest zmienną, parametrem
dodawanej funkcji lub czymś jeszcze innym?
Pozdrawiam -- Spook.
--
! ._______. Warning: Lucida Console sig! //) !
! || spk || www.spook.freshsite.pl / _ """*!
! ||_____|| spook at op.pl / ' | ""!
! | ___ | tlen: spoko_ws gg:1290136 /. __/"\ '!
! |_|[]_|_| May the SOURCE be with you! \/) \ !
-
2. Data: 2010-09-02 04:57:01
Temat: Re: Resolve'ing identyfikatorów
Od: Jacek Czerwinski <...@...z.pl>
W dniu 2010-09-01 23:37, Wojciech "Spook" Sura pisze:
>
> Moje pytanie brzmi: na którym etapie przetwarzania powinno dojść do
> stwierdzenia czy dany identyfikator (np. x) jest zmienną, parametrem
> dodawanej funkcji lub czymś jeszcze innym?
Pobiezna mysl jeszcze nie obudzonego mozgu: w jezyku z dynamicznymi
deklaracjami nie dysponujesz taka wiedza na etapie analizy
syntaktycznej, zostaje tylko wykonanie. W jezyku z obowiazkowymi
deklaracjami mozna (chyba) na etapie parsowania.
Chociaz temat zachodzi na semantyke, np zmienne z zewnetrznego zakresu
nie sa do tak latwego ustalenia czysto syntaktycznym parserem. W
"prawdziwych" jezykach ktore to posiadaja, to jest wcale niebanalny
runtime (ramki, pierdoly itd).
-
3. Data: 2010-09-02 05:27:27
Temat: Re: Resolve'ing identyfikatorów
Od: Jacek Czerwinski <...@...z.pl>
W dniu 2010-09-02 06:57, Jacek Czerwinski pisze:
> W dniu 2010-09-01 23:37, Wojciech "Spook" Sura pisze:
>
>>
>> Moje pytanie brzmi: na którym etapie przetwarzania powinno dojść do
>> stwierdzenia czy dany identyfikator (np. x) jest zmienną, parametrem
>> dodawanej funkcji lub czymś jeszcze innym?
>
> np zmienne z zewnetrznego zakresu
> nie sa do tak latwego ustalenia czysto syntaktycznym parserem. W
> "prawdziwych" jezykach ktore to posiadaja, to jest wcale niebanalny
> runtime (ramki, pierdoly itd).
>
Stwierdzenia czy pobrania wartosci. Z ramkami itd to problem pobrania a
stwierdzone musi byc wczesniej.
W sumie "stwierdzenie czy pobranie wartosci" to wazne pytanie, chodzi Ci
o akademicka poprawnosc (X jest argumentem z poziomu o jeden wyzej), czy
po prostu liczbe? W stosowym interpreterze to na runtime proste cofanie
sie po stosie i masz.
-
4. Data: 2010-09-02 07:22:21
Temat: Re: Resolve'ing identyfikatorów
Od: Krzysiek Kowaliczek <k...@g...com>
Użytkownik Wojciech "Spook" Sura napisał:
> Moje pytanie brzmi: na którym etapie przetwarzania powinno dojść do
> stwierdzenia czy dany identyfikator (np. x) jest zmienną, parametrem
> dodawanej funkcji lub czymś jeszcze innym?
Na następnym etapie po parsowaniu zwanym analizą semantyczną.
Zobacz na moje przykłady z Lemon++, jest tam prosty kompilator
i interpreter ( examples/taste ).
http://sourceforge.net/projects/lemonxx/
Pozdrawiam
KK
-
5. Data: 2010-09-02 10:00:42
Temat: Re: Resolve'ing identyfikatorów
Od: Mateusz Ludwin <n...@s...org>
Jacek Czerwinski wrote:
> Pobiezna mysl jeszcze nie obudzonego mozgu: w jezyku z dynamicznymi
> deklaracjami nie dysponujesz taka wiedza na etapie analizy
> syntaktycznej, zostaje tylko wykonanie. W jezyku z obowiazkowymi
> deklaracjami mozna (chyba) na etapie parsowania.
Moim zdaniem jak najbardziej da się to zrobić na etapie analizy drzewa, przecież
interpreter musi przetrzymywać tablicę symboli dokładnie w taki sposób, w jaki
robi to kompilator.
Na etapie tworzenia AST, napotykając := patrzymy na lewo i po przetworzeniu
deklaracji funkcji f dodajemy ją do tablicy symboli, jednocześnie zapamiętując,
że x i y to nazwy atrybutów funkcji f. Potem przetwarzamy prawą stronę i
jednoznacznie możemy stwierdzić czym jest każda nazwa. Po wyjściu z :=
zostawiamy w tablicy symboli deklarację f, wyrzucając niepotrzebne x i y.
--
Mateusz Ludwin mateuszl [at] gmail [dot] com
-
6. Data: 2010-09-02 12:21:49
Temat: Re: Resolve'ing identyfikatorów
Od: Krzysiek Kowaliczek <k...@g...com>
Użytkownik Mateusz Ludwin napisał:
> Moim zdaniem jak najbardziej da się to zrobić na etapie analizy drzewa,
> przecież interpreter musi przetrzymywać tablicę symboli dokładnie w taki
> sposób, w jaki robi to kompilator.
Tak. Dla języków dynamicznych da się statycznie sprawdzić czy
identyfikator występuje w danym zakresie. Nie da się zawsze
statycznie ustalić typ. Uwaga interpretacja i kompilacja nie ma tu nic
do rzeczy. Tak jak język dynamiczny może być kompilowany,
tak język ze statycznym systemem typów może być interpretowany.
Pozdrawiam
KK
-
7. Data: 2010-09-02 13:51:10
Temat: Re: Resolve'ing identyfikatorów
Od: Mateusz Ludwin <n...@s...org>
Krzysiek Kowaliczek wrote:
> Tak. Dla języków dynamicznych da się statycznie sprawdzić czy
> identyfikator występuje w danym zakresie. Nie da się zawsze
> statycznie ustalić typ. Uwaga interpretacja i kompilacja nie ma tu nic
> do rzeczy. Tak jak język dynamiczny może być kompilowany,
> tak język ze statycznym systemem typów może być interpretowany.
Różnica jest taka, że między kolejnymi wywołaniami interpretera trzeba
przechowywać definicje funkcji i zmiennych z poprzednich wywołań. Przy
kompilacji drzewko jest tylko jedno.
--
Mateusz Ludwin mateuszl [at] gmail [dot] com
-
8. Data: 2010-09-02 19:44:38
Temat: Re: Resolve'ing identyfikatorów
Od: Krzysiek Kowaliczek <k...@g...com>
Użytkownik Mateusz Ludwin napisał:
> Różnica jest taka, że między kolejnymi wywołaniami interpretera trzeba
> przechowywać definicje funkcji i zmiennych z poprzednich wywołań. Przy
> kompilacji drzewko jest tylko jedno.
Nie rozumiem jak to się ma do analizy semantycznej, która dla języków
ze statycznym systemem typów zarówno dla kompilatora i interpretera
wygląda tak samo.
Pozdrawiam
KK
-
9. Data: 2010-09-03 09:07:27
Temat: Re: Resolve'ing identyfikatorów
Od: Mateusz Ludwin <n...@s...org>
Krzysiek Kowaliczek wrote:
> Nie rozumiem jak to się ma do analizy semantycznej, która dla języków
> ze statycznym systemem typów zarówno dla kompilatora i interpretera
> wygląda tak samo.
Oczywiście że analiza semantyczna wygląda tak samo, odniosłem się do "Uwaga
interpretacja i kompilacja nie ma tu nic do rzeczy."
Będzie trochę więcej drzewek.
--
Mateusz Ludwin mateuszl [at] gmail [dot] com
-
10. Data: 2010-09-04 08:52:49
Temat: Re: Resolve'ing identyfikatorów
Od: "Wiktor S." <wswiktor&poczta,fm@no.spam>
> Resolve'ing
interesujący (po)tworek...
--
Azarien