Article View: pl.comp.lang.c
Article #247158Re: ile czasu trzeba aby sie nauczyc c++?
From: (fir)
Date: Fri, 21 Apr 2017 21:09
Date: Fri, 21 Apr 2017 21:09
104 lines
5788 bytes
5788 bytes
W dniu piątek, 21 kwietnia 2017 22:51:12 UTC+2 użytkownik (fir) napisał:
> W dniu piątek, 21 kwietnia 2017 20:00:46 UTC+2 użytkownik godek....@gmail.com napisał:
> > W dniu piątek, 21 kwietnia 2017 18:01:23 UTC+2 użytkownik (fir) napisał:
> >
> > > jak ja ostatnio pisalem prosty kompilator "wyrazen z jednym rowna sie i z czterema operatorami (+-*/) plus nawiasy" to to wcale nie do konca przypominalo 'petle z ifami lub ze switchem')
> >
> > też ostatnio rozwijam kompilator na potrzeby pracy magisterskiej,
> > ale kompilacja to jednak coś innego, niż parsowanie. w ogólnym
> > przypadku celem parsowania jest zbudowanie drzewa rozbioru składni,
> > choć oczywiście jeżeli format instrukcji jest prosty, często może
> > wcale nie być nawet takiej potrzeby (co ma znaczenie, jak ktoś
> > pracuje w językach takich jak C czy Pascal, gdzie obsługa drzew
> > jest raczej uciążliwa). Jeżeli masz już drzewo rozbioru składni,
> > to stworzenie interpretera dla języka jest raczej łatwym zadaniem.
> >
> > Dla amatorów Lispa parsowanie jest zasadniczo umiarkowanie ciekawym
> > zagadnieniem, natomiast kompilacja -- jak najbardziej. Najbardziej
> > podstawowa technika kompilacji to konwersja do postaci, w której
> > funkcje przekazują kontynutacje ("Continuation-Passing Style").
> >
> > Na przykład, wyrażenie (+ (* x y) (/ z w))
> > w postaci przekazującej kontynuacje miałoby postać
> >
> > (pass* x y
> > (lambda (xy)
> > (pass/ z w
> > (lambda (zw)
> > (pass+ xy zw return)))))
> >
> > gdzie pass+, pass/ i pass* to CPS-owe odpowiedniki działań arytmetycznych,
> > a "return" to "nadrzędna kontynuacja" (np. koniec programu, albo
> > powrót do wywołującej funkcji). Słowo kluczowe "lambda" ma takie samo
> > znaczenie, jak w języku Scheme czy w lambda-rachunku, i podobne
> > jak "function" w JavaScripcie.
> >
> > Program w takiej postaci można już dość łatwo przekształcić
> > do pseudo-asemblera:
> >
> > xy := x * y
> > zw := z / w
> > result := xy + zw
> > return
> >
> > albo czegoś w tym rodzaju. Dalszy etap nosi w literaturze nazwę
> > "register allocation" (i używa się do tego np. metod kolorowania
> > grafów), a chodzi w nim o to, żeby tym zmiennym przechowującym
> > wyniki pośrednie przypisać konkretne rejestry procesora (żeby zmniejszyć
> > liczbę dostępów do pamięci)
> >
> > lista źródeł, na których się opieram, jest dostępna tutaj:
> >
> > https://www.quora.com/How-do-people-develop-lisps/answer/Panicz-Godek
>
>
> jak wspomnielem nie chce mi sie zagladac do mojego kodu i przerywac cenny stan odpoczywania ale moge powiedziec z pamieci jak to dzialalo (chyba zreszta o tym tu pisalem)
>
> jak mam np takie wyrazenie
>
> x = (3*a+(c-2)/d+f)*g
>
> to moj kod po prostu polegal na tym ze wykonywal powtarzalne przejscia i odkladal 'partykuly' na liste
> upraszczajac wyrazenie
>
> t1=3*a
> x = (t1+(c-2)/d+f)*g
> t2=(c-2)
> x=(t1+t2/d+f)*g
> t3=t2/d
> x=(t1+t3+f)*g
> t4=t1+t3
> x=(t4+f)*g
> t5=(t4+f)
> x=t5*g
> t6=t5*g
> x=t6
>
> sama liste
> t1=3*a
> t2=(c-2)
> t3=t2/d
> t4=t1+t3
> t5=(t4+f)
> t6=t5*g
> x=t6
>
> na asm juz jest przerobic banalnie
>
> mov t1,3
> mul t1,a
> mov t2,c
> sub t2,2 ...itd
>
> algorytm jest uwaam dobry i nie bardo prypomina switcha w petli (bo te operacje sa dosyc uniformiowane i dzialaja w 'multipasie' ) aczkolwiek zakodowalem dokladnie to ale mam wrazenie mniej elegancko niz by sie dalo... mozna by napisac pseudokod jak to zrobic ladniej i prosciej, (ew nieco bardziej ogolnie dla wiekszego seta operatorów), moze troche pozniej cos skrobne
mozliwe jest ze detale tego algorytmu wymagaja wlasnie malej 'konsyderacji'
ogolnie jesli te operacje upraszczajace mialbym juz zakodowane i nazwalbym je
- zdejmij_mnozenie
- zdejmij_dzielenie
- zdejmij_maly_nawias
- zdejmij_dodawanie
- zdejmij_odejmowanie
to jak puscis to w petli by to dzialalo jak najlepiej?
(ciekawe pytanie, ktos ma chec odpowiedziec?)
Technical Details
Message-ID:
<64803b60-0828-4ab8-b089-d136c85e7b97@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!e132no1058022ite.0!news-out.google.com!v196ni295ita.0!nntp.google.com!c26no238232itd.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<451e90e7$0$17965$f69f905@mamut2.aster.pl> <b1e91861-9e4f-4b2e-be9f-b9a47ca8d719@googlegroups.com> <58e14e55$0$5152$65785112@news.neostrada.pl> <50630553-5585-4c79-b204-10decc20648f@googlegroups.com> <93ccf1ff-6c50-4308-ba33-d7e593ffaeb0@googlegroups.com> <almarsoft.2018019733568017445@news.v.pl> <16c707cc-51c1-49fe-8d99-28670469a954@googlegroups.com> <780c3784-e9ed-44e6-b983-ba04d778a9c4@googlegroups.com> <6eb4f9c1-4016-43fc-8003-1484e904aa9b@googlegroups.com> <5af86780-9446-45cd-8776-b83b3f14296e@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 10.157.8.112 with SMTP id 103mr7543142oty.69.1492808999567; Fri, 21 Apr 2017 14:09:59 -0700 (PDT) X-Received: by 10.157.17.171 with SMTP id v40mr331602otf.11.1492808999530; Fri, 21 Apr 2017 14:09:59 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!e132no1058022ite.0!news-out.google.com!v196ni295ita.0!nntp.google.com!c26no238232itd.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Fri, 21 Apr 2017 14:09:57 -0700 (PDT) In-Reply-To: <5af86780-9446-45cd-8776-b83b3f14296e@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=5.172.255.48; posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN NNTP-Posting-Host: 5.172.255.48 References: <451e90e7$0$17965$f69f905@mamut2.aster.pl> <b1e91861-9e4f-4b2e-be9f-b9a47ca8d719@googlegroups.com> <58e14e55$0$5152$65785112@news.neostrada.pl> <50630553-5585-4c79-b204-10decc20648f@googlegroups.com> <93ccf1ff-6c50-4308-ba33-d7e593ffaeb0@googlegroups.com> <almarsoft.2018019733568017445@news.v.pl> <16c707cc-51c1-49fe-8d99-28670469a954@googlegroups.com> <780c3784-e9ed-44e6-b983-ba04d778a9c4@googlegroups.com> <6eb4f9c1-4016-43fc-8003-1484e904aa9b@googlegroups.com> <5af86780-9446-45cd-8776-b83b3f14296e@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <64803b60-0828-4ab8-b089-d136c85e7b97@googlegroups.com> Subject: Re: ile czasu trzeba aby sie nauczyc c++? From: "(fir)" <profesor.fir@gmail.com> Injection-Date: Fri, 21 Apr 2017 21:09:59 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit