eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingLHS czy RHS?
Ilość wypowiedzi w tym wątku: 13

  • 11. Data: 2010-08-25 20:48:09
    Temat: Re: LHS czy RHS?
    Od: "Marcin 'Qrczak' Kowalczyk" <q...@k...org.pl>

    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


  • 12. Data: 2010-08-25 21:00:32
    Temat: Re: LHS czy RHS?
    Od: Wojciech Muła <w...@p...null.onet.pl.invalid>

    On Mon, 23 Aug 2010 16:48:25 +0200 "Wojciech \"Spook\" Sura"
    <spook"mad@hatter"op.pl> wrote:

    > Piszę interpreter wyrażeń matematycznych. Będzie on jednak
    > rozszerzony o dodatkowe funkcjonalności, m.in rejestrowanie w locie
    > makr:
    >
    > f(x,y):=x+y

    Może jednak gotowiec:
    http://muparser.sourceforge.net/

    Ma duże możliwości i przyjazną licencję.

    w.


  • 13. Data: 2010-08-26 07:44:56
    Temat: Re: LHS czy RHS?
    Od: Krzysiek Kowaliczek <k...@g...com>

    Użytkownik Marcin 'Qrczak' Kowalczyk napisał:
    > 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:

    Tutaj jest dla C++:
    https://sourceforge.net/projects/lemonxx/
    svn co https://lemonxx.svn.sourceforge.net/svnroot/lemonxx lemonxx

    Przy okazji jak robiłem wsparcie dla C++ w Lemon dodałem kilka
    przykładów, najbardziej rozbudowany to Taste - jest tryb interpretacji
    i kompilacji.

    Pozdrawiam
    KK

strony : 1 . [ 2 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: