-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
0.net!feeder.news-service.com!postnews.google.com!v41g2000yqv.googlegroups.com!
not-for-mail
From: "Marcin 'Qrczak' Kowalczyk" <q...@k...org.pl>
Newsgroups: pl.comp.programming
Subject: Re: LHS czy RHS?
Date: Wed, 25 Aug 2010 13:48:09 -0700 (PDT)
Organization: http://groups.google.com
Lines: 91
Message-ID: <1...@v...googlegroups.com>
References: <op.vhwbez1n8x7o78@notebook> <i4u76v$snk$1@inews.gazeta.pl>
<o...@l...medicom.local>
<6...@g...googlegroups.com>
<op.vhyh8zaq8x7o78@notebook>
<2...@p...null.onet.pl.invalid>
<o...@l...medicom.local>
<4...@x...googlegroups.com>
<op.vhz8l5kj8x7o78@notebook>
NNTP-Posting-Host: 83.7.226.46
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: quoted-printable
X-Trace: posting.google.com 1282769296 12309 127.0.0.1 (25 Aug 2010 20:48:16 GMT)
X-Complaints-To: g...@g...com
NNTP-Posting-Date: Wed, 25 Aug 2010 20:48:16 +0000 (UTC)
Complaints-To: g...@g...com
Injection-Info: v41g2000yqv.googlegroups.com; posting-host=83.7.226.46;
posting-account=Y4cAXQoAAAAv8UBiA5Li4Y_naLKJKxAx
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.3 (KHTML,
like Gecko) Ubuntu/10.04 Chromium/6.0.472.36 Chrome/6.0.472.36
Safari/534.3,gzip(gfe)
Xref: news-archive.icm.edu.pl pl.comp.programming:186716
[ ukryj nagłówki ]On Aug 25, 7:38 pm, "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl>
wrote:
> Po pierwsze, nie wystarczy samo drzewo wyrażenia. Wyrażenie f(x,y):=x+y
> zostanie rozbite na drzewo, po lewej stronie którego będzie podwieszona
> funkcja f(, jej parametry, przecinek składający je w listę i nawias
> domykający.
Ależ nie będzie przecinków i nawiasów. Z wyrażenia zostawiamy tylko
to, co jest potrzebne dla dalszej interpretacji, zapisane w takiej
formie, w jakiej wygodnie jest interpretować (np. lista czy tablica
argumentów zamiast zagnieżdżonych par). Te przekształcenia robi się
trywialnie w trakcie parsowania.
> Jeśli zdecyduję się na interpretowanie tak skonstruowanego
> drzewa, będzie mnie czekać dużo pracy - stwierdzenie, czy lewa gałąź jest
> poprawna, zdecydowanie o tym, czy dodawana jest funkcja czy zmienna,
To można zrobić raz, zaraz po parsowaniu (może być jako osobny etap,
może być równocześnie, zależnie od tego, jakie informacje są potrzebne
do danego sprawdzenia). Nie warto sprawdzać poprawności składniowej za
każdym razem przy obliczaniu wartości.
> Oczywiście mogę wykonać te operacje przed procesem interpretacji, ale
> wówczas musiałbym zastanowić się nad specjalnym węzłem drzewa
> przechowującym prekompilowane informacje o prototypie funkcji: jej nazwie
> oraz liczbie i nazwach jej parametrów.
Takich rzeczy nie umieszcza się w drzewie, tylko na podstawie drzewa
tworzy w osobnym miejscu, w formacie wygodnym dla późniejszego
interpretowania.
> Zaistnienie maszyny wirtualnej wraz z odpowiednim językiem nie budzi już
> we mnie sprzeciwów - maszyna jest z założenia wysokopoziomowa, więc
> swobodnie mogę dodać jej rozkaz dodający funkcję, zawierający szczegółowe
> informacje na jej temat - łącznie ze skompilowanym do zestawu rozkazów
> wyrażeniem.
Program maszyny wirtualnej wygodniej jest zapisywać w formie drzewa
niż w formie ciągu rozkazów.
Nie musi to być to samo drzewo, które wypluł parser, chociaż w
prostych przypadkach może być.
> Kolejnym argumentem przemawiającym za maszyną wirtualną jest prostota jej
> implementacji - wykonywanie rozkazu sprowadziłoby się do iteracyjnego
> przetworzenia dużej instrukcji switch(), implementowanej wewnętrznie
> zazwyczaj jako seria instrukcji goto, które są stosunkowo szybkie. Mniej
> danych przechowywanych byłoby również na stosie.
Interpretacja drzewka jest łatwiejsza. Nie trzeba symulować stosu
ręcznie, stos jest w naturalny sposób zanurzony w stos wywołań funkcji
interpretera.
Tu jest przykład (ale nie w C++):
http://kokogut.cvs.sourceforge.net/viewvc/kokogut/ko
kogut/examples/KoCalc/Calc.ko?view=markup
Kalkulator z definiowaniem zmiennych i funkcji, również lokalnie, z
przekazywaniem funkcji jako wartości, z pewną ilością funkcji
wbudowanych. Oto przykładowa sesja:
> fact(x) = if x == 0 then 1 else x * fact(x - 1)
> fact(5)
120
> newton(f, fp, x0, eps) = let loop(x) = let y = f(x) in if abs(y) < eps then x else
loop(x - y / fp(x)) in loop(float(x0))
> newton(sin, cos, 3, 1e-10)
3.141592653589793
> let f(x) = x^2-2; fp(x) = 2*x in newton(f, fp, 1, 1e-10)
1.4142135623746899
Następne wpisy z tego wątku
- 25.08.10 21:00 Wojciech Muła
- 26.08.10 07:44 Krzysiek Kowaliczek
Najnowsze wątki z tej grupy
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
Najnowsze wątki
- 2025-07-23 Gdańsk => Programista Delphi <=
- 2025-07-23 Gdańsk => Programista Mainframe (z/OS, Assembler) <=
- 2025-07-23 Warszawa => Starszy inżynier DevOps (AWS) <=
- 2025-07-23 Gdańsk => Mainframe (z/OS, Assembler) Developer <=
- 2025-07-23 Kraków => Senior Fullstack Engineer (Low-Code Platform) <=
- 2025-07-23 Wrocław => Senior Key Account Manager IT <=
- 2025-07-23 Trójmiasto => Head of Social Media <=
- 2025-07-23 Rzeszów => Spedytor Międzynarodowy <=
- 2025-07-23 Lublin => ERP Implementation Consultant (AP Module) <=
- 2025-07-23 Środa Wielkopolska => SAP FI/CO Internal Consultant <=
- 2025-07-23 Warszawa => Inżynier oprogramowania .Net <=
- 2025-07-23 Kraków => Kotlin Developer <=
- 2025-07-23 Żerniki => Dyspozytor Międzynarodowy <=
- 2025-07-23 Warszawa => Java Developer <=
- 2025-07-23 Wrocław => Konsultant wdrożeniowy (systemy controlingowe) <=