Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Skrócony regulamin

Pisanie kompilatora

Idź do strony 1, 2  Następny

 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Algorytmy + inżynieria oprogramowania
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
kamcio1



Dołączył: 14 Lip 2011
Posty: 113

PostWysłany: Sob Lis 19, 2011 9:27 pm      Temat postu: Pisanie kompilatora Odpowiedz z cytatem Pisownia

Witam, czy zna ktoś jakiś dobry generator kompilatorów i wie jak go użyć?
Niecierpliwie czekam na informacje.

_________________
http://chomikuj.pl/kamcio1pliki/Programy/Pakiet+Comp-BOOST
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Odwiedź stronę autora
nwxxeh



Dołączył: 21 Kwi 2007
Posty: 763
Skąd: Nieocenzurowano

PostWysłany: Nie Lis 20, 2011 10:29 am      Temat postu: Odpowiedz z cytatem Pisownia

Generator kompilatorów? - Nie ma takiego...

Musisz sam napisać kompilator...

_________________
Pisze z BIOSu, mogą być literówki...

Post nr. 666 - Sro Paź 26, 2011 5:25 pm
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
izaw



Dołączył: 12 Wrz 2008
Posty: 2003
Skąd: Łódź

PostWysłany: Nie Lis 20, 2011 11:40 am      Temat postu: Odpowiedz z cytatem Pisownia

Uważasz, że jesteś w stanie napisać jakiś sensowny, na pewno nie dobry, kompilator?

Muszę cię rozczarować. Nie masz umiejętności.

Zacznij od napisania parsera analizującego treść pliku tekstowego. Oczywiście możesz użycz gotowej biblioteki. Pomocą będzie wujek Google.

_________________
Program nie robi tego co chce programista, ale to co programista zaprogramował
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Hashedone



Dołączył: 23 Sie 2008
Posty: 853

PostWysłany: Nie Lis 20, 2011 1:32 pm      Temat postu: Odpowiedz z cytatem Pisownia

Nie ma czegoś takiego jak generator kompilatora. Jednak wbrew temu co tu się mówi, wcale nie jest to aż taka trudna sprawa. W najprostszej sytuacji potrzebujesz trzech rzeczy: lekser, parser i generator bytekodu (czy nawet kodu maszynowego). Leksery i parsery można pisać na różne sposoby: dość staromodny to lex/flex + yacc/bison (są z tym pewne problemy niestety, szczególnie na windowsie), które tłumaczą kod w specjalnym języku na kod C/C++. Są nowoczesne odpowiedniki, np ANT* (pod * kryje się ciąg znaków którego nie pamiętam) - ten generuje domyślnie kod Java, ale również można go zmusić do generowania C++. Można też użyć po prostu biblioteki do tego przeznaczonej - w C++ może to być boost::spirit.
Pozostaje kwestia generowania bytecodu. Dawniej potrzeba było faktycznie tłumaczyć na kod assembly i przepuścić wszystko jeszcze przez assembler. Dzisiaj są już takie narzędzia jak LLVM - mają wygodny interfejs do pisania generatorów kodu. Do tego dostarcza narzędzia do pisania JITów, debuggerów i masy innych rzeczy. Polecam wygooglować.
===EDIT===
Dostałem olśnienia. ANT* = ANTLR

_________________
PWr, WPPT, Informatyka
"Two or more? - use a for", Dijkstra
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
izaw



Dołączył: 12 Wrz 2008
Posty: 2003
Skąd: Łódź

PostWysłany: Nie Lis 20, 2011 6:01 pm      Temat postu: Odpowiedz z cytatem Pisownia

Niby tak. Tylko to będzie bardzo ułomne. Optymalizacje dokonywane przez współczesne kompilatory przerastają możliwości przeciętnego kodera, nie mówiąc o początkującym. Zatem tak, ale jako ćwiczenie.

BTW. Sam napisałem kompilator i interpreter dla... Brainfuck'a.

_________________
Program nie robi tego co chce programista, ale to co programista zaprogramował
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Hashedone



Dołączył: 23 Sie 2008
Posty: 853

PostWysłany: Nie Lis 20, 2011 8:06 pm      Temat postu: Odpowiedz z cytatem Pisownia

O jakiej optymalizacji ty mówisz? Wiesz co to jest LLVM? Generator i kompilator kodu SSA. Optymalizacje na kodzie HLL są zwykle minimalne i trywialne. Wszystkie ważne optymalizacje dzisiejsze kompilatory wykonują na poziomie kodu SSA (lub innego niskopoziomowego). LLVM daje nam out of the box między innymi redukcję nieużywanych zmiennych, optymalizację rekursji ogonowej, rozwiązywanie pętli, inlining funkcji, redukcja powtarzającego się kodu, oraz masę innych, mniej typowych optymalizacji. Do tego możliwość w prosty sposób tworzenia własnych "optimization passów" właściwych dla bardzo konkretnego języka. Jeśli pisanie kompilatora pociągało by za sobą każdorazową implementację takich podstawowych a jednocześnie bardzo trudnych rzeczy, języki nie powstawały by w takim tempie. A napisać interpreter dla brainfucka rozgarnięty średniopoczątkujący programista powinien w przeciągu <30min (bo w przypadku takiego języka jakiekolwiek optymalizacje to rzecz nadmiarowa).
_________________
PWr, WPPT, Informatyka
"Two or more? - use a for", Dijkstra
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
kamcio1



Dołączył: 14 Lip 2011
Posty: 113

PostWysłany: Sro Lis 23, 2011 6:32 pm      Temat postu: Odpowiedz z cytatem Pisownia

Cieszę się, że wyrażacie swoje opinie, ale, bardziej interesuje mnie, jak napisać kompilator. Znalazłem co prawda, trochę na ten temat, ale pomijając, że po angielsku, to wyglądało to na trochę... skomplikowane. Myślę, że użytkownik Hashedone powinien jeszcze coś napisać.
_________________
http://chomikuj.pl/kamcio1pliki/Programy/Pakiet+Comp-BOOST
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Odwiedź stronę autora
Hashedone



Dołączył: 23 Sie 2008
Posty: 853

PostWysłany: Sro Lis 23, 2011 7:09 pm      Temat postu: Odpowiedz z cytatem Pisownia

Ale co? Chętnie odpowiem na pytania na ile wiem, być może rzucę linkiem. Pisanie kompilatora to po prostu pisanie programu który tłumaczy jeden język formalny na inny. Tym innym zwykle jest język assembly, lub dowolny IR który łatwo się na Assembly tłumaczy. Jeśli wybierzemy sobie jako cel Assembly, to faktycznie trzeba samemu napisać masę rzeczy, choćby optymalizacje (o ile constant propagation można sobie napisać dość łatwo, o tyle optymalizacja rekursji ogonowej, albo analiza martwgo kodu to zadania nietrywialne). Możesz też znaleźć sobie jakiś wygodny IR, np. GENERIC/GIMPLE (IR gcc), albo co ja zaproponowałem IR llvm. To drugie jest o tyle wygodniejsze, że llvm dostarcza potężną bibliotekę masakrycznie ułatwiającą generowanie kodu (IRBuilder <> załatwia prawie wszystko, przede wszystkim łatwe wstawianie branch'ów, całkowicie pozwala ominąć ręczne wstawianie węzłów phi), do tego jest spora baza materiałów na stronie llvm. Polecam zajrzeć, a najlepiej przyjżeć się tutorialowi pokazującemu pisanie kompletnego języka: http://llvm.org/docs/tutorial/
Przy czym jeśli w ten sposób pisać lexery/parsery, to można się faktycznie pochlastać, zanim to będzie działało (a jeszcze bardziej jak będzie się chciało dodać nową składnię). O pisaniu parserów powstało już sporo tekstów - do googlowania hasła lex/flex, yacc/bison, ANTLR, boost::spirit, no i oczywiście bardziej podstawowe - trza poczytać o językach formalnych, gramatykach bezkontekstowych.

===EDIT===
Żeby nie było że twierdzę, że pisanie kompilatora to rzecz trywialna, bo to faktycznie by była herezja. Dochodzą takie rzeczy jak obsługa typów (jeśli język jest statycznie typowany to pół biedy, ale i tak nic oczywistego - szczególnie jeśli chcemy implementować polimorfizm czy to w sensie OOP jak w Javie/C++, czy funkcyjnym jak w OCamlu), rozwiązywanie problemu kolizji nazw, rozłącznej kompilacji, trzeba napisać jakąś bibliotekę standardową, trzeba zrobić coś z wyjątkami lecącymi z procesora/systemu (choćby dzielenie przez 0, Ctrl + C), ogólnie dostarczyć mechanizm obsługi błędów, żeby język był dzisiaj użyteczny to do tego jakaś forma callbacków/delegatów (czy to w formie wskaźników na funkcję, czy traktowania funkcji jako normalny typ), pewnie jakaś forma przeładowania/definiowania operatorów (chyba że ktoś uważa, że fajnie wygląda kod w Javie, jeśli np. używamy biblioteki do obliczeń naukowych i musimy wykonać sporo działań matematycznych na niej) i masa innych problemów, które aktualnie mi nie przychodzą do głowy. Jednak jeśli ktoś już na poważnie myśli o stworzeniu języka programowania, to myślę że część, jeśli nie wiekszość z nich jest w stanie ogarnąć przede wszystkim czytając jak to robią inni.

_________________
PWr, WPPT, Informatyka
"Two or more? - use a for", Dijkstra
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
lethern



Dołączył: 09 Paź 2007
Posty: 729
Skąd: Bstok/Lublin

PostWysłany: Sro Lis 23, 2011 10:08 pm      Temat postu: Odpowiedz z cytatem Pisownia

Są generatory parserów, poczytaj o tym na Wikipedii to może się odnajdziesz z tym (+są linki)
_________________
używasz Dev-Cpp? tools->editor options -> use tab character (włącz), smart tabs (wyłącz)... albo ściągnij np. Code::Blocks lub Visual Studio C++ darmowe
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Numer GG
usercontrol



Dołączył: 05 Lip 2005
Posty: 2077
Skąd: Poznań

PostWysłany: Nie Gru 18, 2011 1:20 pm      Temat postu: Odpowiedz z cytatem Pisownia

Aho Alfred V., Sethi Ravi, Ullman Jeffrey D. "Kompilatory. Reguły, metody i narzędzia", WNT.
_________________
Jedna zmienna żali się drugiej:
- Ten wskaźnik jest taki fajny... Ale w ogóle nie zwraca na mnie uwagi.
- Po prostu nie jesteś w jego typie.

Kod:
int getRandom() {return 5; //na podstawie rzutu kostką}

Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Algorytmy + inżynieria oprogramowania Wszystkie czasy w strefie CET (Europa)
Idź do strony 1, 2  Następny
Strona 1 z 2

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.34339 sekund, zapytan = 7
contact

| Darmowe programy i porady Jelcyna | VB4all | Tansze zakupy w Helionie |