![]() |
![]() |
|
Programiranje Programski jezici, tehnike, alatke... |
![]() |
|
Alatke vezane za temu | Vrste prikaza |
![]() |
#1 |
Veteran
Član od: 25.12.2005.
Lokacija: Kragujevac
Poruke: 541
Zahvalnice: 67
Zahvaljeno 55 puta na 28 poruka
|
![]()
E ovako, video sam razlicite programske jezike, od onih sto jedan covek ne moze da napravi tipa VB ili C#, pa sve do programskih jezika koji zahtevaju jedno popodne da se naprave tipa Brainfuck. Posle svega toga odlucio sam i ja malo da se pozabavim tom tematikom, pa sam tako odlucio da napravim MPL sto znaci mine programming language.Jezik ce biti radjen u VB6 i prevodice kod u C, dok cu posle nekog vremena napraviti mogucnost pravljenja COM fajlova. Cilj mi je da napravim programski jezik u kome cu uspeti da napravim kompajler za njega. Jezik ce biti namenjen najvise pocetnicima, ali bice zanimljiv i za ljude sa iskustvom.
Jezik ce imati 5 instrukcija za baratanje sa promenljivama ($, %, ., PUT), 4 IO instrukcije (getf*, putf*, print, get), 5 aritmetickih operacija (+,-,*,/,sqrt), 3 funkcije za kontrolu toka (case, if, do). *getf i putf funkcije su funkcije za otvaranje datoteke za input i otvaranje datoteke za output. Sutra ili prekosutra ocekujte prvi mali kompajler. |
![]() |
![]() |
![]() |
#2 |
Član
Član od: 16.6.2007.
Lokacija: Backa Topola
Poruke: 160
Zahvalnice: 53
Zahvaljeno 71 puta na 42 poruka
|
![]()
Jedva cekam da vidim shta ce biti od ovoga
btw. puno srece ^_^ |
![]() |
![]() |
![]() |
#3 |
Veteran
Član od: 25.12.2005.
Lokacija: Kragujevac
Poruke: 541
Zahvalnice: 67
Zahvaljeno 55 puta na 28 poruka
|
![]()
Hvala
![]() Bice nesto ![]() |
![]() |
![]() |
![]() |
#4 |
Član
Član od: 5.12.2005.
Lokacija: Sombor
Poruke: 245
Zahvalnice: 7
Zahvaljeno 31 puta na 24 poruka
|
![]()
Pre nego sto pocnes,mozda bi trebao procitati malo strucne literature.Da naucis sta su skaneri,parseri...Lakse je takve stvari resavati sa lex-om i yacc-om(i derivatima) nego pisati ceo kod od nule.
Inace po ovome sto si naveo,vise mi lici da pravis model nekog zamisljenog (mikro)procesora,nego programski jezik viseg nivoa,ali ajde...Svejedno je zanimljiva oblast ![]() |
![]() |
![]() |
![]() |
#5 |
Deo inventara foruma
|
![]()
Prije nego sto pocnes trebao bi da procitas malo engleske gramatike jer ne moze da bude MINE programming language,nego samo MY programming language.
Primjer : This is my book. This book is mine. Znaci samo ![]() |
![]() |
![]() |
![]() |
#6 |
V.I.P. GNU/Linux
Član od: 1.11.2005.
Poruke: 11.131
Zahvalnice: 2.058
Zahvaljeno 4.911 puta na 2.848 poruka
|
![]()
Slažem se. Ovoj temi su ipak posvećeni čitavi predmeti na tehničkim fakultetima, tako da je daleko od zezanja (naravno ako se cilja na pravljenje upotrebljivog jezika).
|
![]() |
![]() |
![]() |
#7 |
Veteran
Član od: 25.12.2005.
Lokacija: Kragujevac
Poruke: 541
Zahvalnice: 67
Zahvaljeno 55 puta na 28 poruka
|
![]()
Ja sam i hteo prvo da napisem MY, nego su me istripovali da je mine ispravnije
![]() |
![]() |
![]() |
![]() |
#8 |
Starosedelac
|
![]()
E super. Puno ti sreće želim. Posle mogu da se hvalim kako poznajem autora MPL
![]() ![]() |
![]() |
![]() |
![]() |
#9 |
Član
Član od: 9.7.2007.
Poruke: 119
Zahvalnice: 2
Zahvaljeno 31 puta na 29 poruka
|
![]()
Preporučujem ti da uzmeš ANTLR i praviš svoj MPL u tome umesto u VB-ju.
|
![]() |
![]() |
![]() |
#10 |
Veteran
Član od: 25.12.2005.
Lokacija: Kragujevac
Poruke: 541
Zahvalnice: 67
Zahvaljeno 55 puta na 28 poruka
|
![]()
@Dellion:
A, da secam se. Dobro, od ove godine idemo i u istu skolu, osim ako nisi zavrsio 4.godinu ![]() @Rile: Sta je to? |
![]() |
![]() |
![]() |
#11 |
Član
Član od: 9.7.2007.
Poruke: 119
Zahvalnice: 2
Zahvaljeno 31 puta na 29 poruka
|
![]()
ANTLR je parser generator.
http://www.antlr.org/ Ukratko: ovo je alatka koja ti omogucava da pravis kompajlere/interpretere. Tradicionalno, za to se su se koristili Lex i Yacc (i varjante), koji su bottom-up parser generatori (lex pravi lexer - lekser cita ulaznu sekvencu karaktera i prepoznaje ih i oznacava brojevima - tokenima. Tokeni su ulaz u parser, koji se generise pomocu yacc na osnovu formalne gramatike u BNF notaciji). Parser generise AST (abstract syntax tree) na osnovu kojeg mozes da vrsis transformacije ulaznog jezika u ono sto hoces ("redukujes" ga kako bi se to reklo u parserskom recniku). Sva kombinatorika u ovom botom-up (odozdo nagore) pristupu je predstavljena kao "state-machine" odnosno kombinacionim automatom. ANTLR radi slicnu stvar, ali drugacije. On generise top-down (odozgo na dole) parsere koji lice na rucno pravljene parsere i generalno je lakse raditi sa njim nego sa tradicionalnim alatima. Pristup "odozgo na dole" je "prirodan" nacin razmisljanja kada rucno pravimo parsere (mada je moguce raditi i obrnuto). U ovom pristupu krecemo od najviseg simbola u gramatici (na primer "start") i onda iduci "nadole" ka "nizim" definicijama, pokusavamo da uparimo moguce sledece simbole. Implementacija je obicno: jedno gramaticko pravilo = jedna funkcija. ANTLR upravo ovo generise. U svakom slucaju, ja bih otisao na onaj gore link i procitao malo, ima primera gramatika za razne jezike, kako veoma jednostavne (za ucenje) tako i kompleksnih, na primer za C ili za C++ (ne znam koliko dobro radi ova za C++ ali bih ocekivao da je za C kompletna). Dobra stvar je sto mozes da ga radis u javi dok ucis, postoji i plug-in za eclipse, pa je rad prilicno komforan. Ali ANTLR takodje ima mogucnost generisanja parsera u C++. |
![]() |
![]() |
![]() |
#12 |
Veteran
Član od: 27.12.2005.
Lokacija: Vremenske Grobnice, Hiperion
Poruke: 680
Zahvalnice: 99
Zahvaljeno 124 puta na 82 poruka
|
![]()
Pogledaj neku od sledećih knjiga:
Compilers: Principles, Techniques, and Tools iliti Dragon Book kako je još zovu, a inače je osnovno štivo za svakoga ko želi da se bavi konstrukcijom bilo kakvih kompajlera ili interpretera Modern Compiler Implementation in C/Java/ML, gde imaš kompletne implementacije kompajlera pisane u, zamisli, C/Java/ML-u... A imaš i na srpskom relativno sveže Prevodioce i Interpretatore Duška Vitasa ( on drži predavanja iz istoimenog predmeta na MATF-u, jel' ![]() Inače, šta da ti kažem, srećno sa tim! PS: ako se dobro sećam, bottom-up analiza je daleko zahvalnija za rano detektovanje grešaka od top-down sistema (a inače, oba mogu ručno da se urade) Poslednja ispravka: M.Silenus (17.8.2007 u 10:09) |
![]() |
![]() |
![]() |
#13 |
Veteran
Član od: 25.12.2005.
Lokacija: Kragujevac
Poruke: 541
Zahvalnice: 67
Zahvaljeno 55 puta na 28 poruka
|
![]()
Sada sam probao ovaj ANTLR, i uopste ga ne kapiram...
Uzeo sam i neki primer da vidim kako je to, ali mi se ne svidja. I ne mogu da napravim kompajler kao EXE fajl.... Sada cu ja natenane to da uradim u VB6, koji ce da kompajlira kôd u C, pa ce onda preko GCC-a da ga kompajlira u exe. Poslednja ispravka: nika100 (17.8.2007 u 16:40) |
![]() |
![]() |
![]() |
#14 |
Član
Član od: 2.6.2007.
Poruke: 36
Zahvalnice: 6
Zahvaljeno jedanput na jednoj poruci
|
![]()
Please say you're joking .. znaci .. ti hoces da napravis nesto kao IDE koji 'tvoju' sintaksu prevodi u c sintaksu .. i zove gcc i kompajlira kod ?
|
![]() |
![]() |
![]() |
#15 |
Veteran
Član od: 25.12.2005.
Lokacija: Kragujevac
Poruke: 541
Zahvalnice: 67
Zahvaljeno 55 puta na 28 poruka
|
![]()
Da, ali to i nije toliko tesko, jer to nece biti bas neki ide, nego ce imati jedan Richtextbox sa syntax highligtingom i kada se nesto uradi i kada se klikne 'compile' prevesce u C kod na jedan prost nacin.
I mislim da sam provalio to za parser i tako to: Znaci ja napravim niz od n elemenata (n je broj funkcija). Kada ja unesem naprimer 'IF' on ce proveriti da li 'IF' ima u nizu, ako ima neka pogleda koji je broj po redu, i to je znaci token, i kasnije samo te brojeve pregleda i gleda sta oni znace. Onda kada vidi sta znaci, pretvara to u sintaksu drugog jezika i to kasnije cuva. Poslednja ispravka: nika100 (17.8.2007 u 17:31) |
![]() |
![]() |
![]() |
#16 |
Član
Član od: 2.6.2007.
Poruke: 36
Zahvalnice: 6
Zahvaljeno jedanput na jednoj poruci
|
![]()
Mislis ovo ... http://www.sk.co.yu/forum/showthread...hlight=alc0h0l
|
![]() |
![]() |
![]() |
#17 |
Član
Član od: 5.12.2005.
Lokacija: Sombor
Poruke: 245
Zahvalnice: 7
Zahvaljeno 31 puta na 24 poruka
|
![]()
Pogresno si shvatio sustinu kompajlera.Njegov cilj jeste prevodjenje neke gramatike u kod razumljiv procesoru,ali da bi dotle dosao treba da odredis samu gramatiku jezika(znaci da je osmislis teorijski),sintaksu,semantiku jezickih konstrukcija...
|
![]() |
![]() |
![]() |
#18 | |
Novi član
Član od: 25.10.2008.
Poruke: 1
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
![]() Citat:
![]() |
|
![]() |
![]() |
![]() |
#19 |
Član
Član od: 6.3.2006.
Lokacija: Nis
Poruke: 141
Zahvalnice: 31
Zahvaljeno 9 puta na 7 poruka
|
![]()
Da, lepo su ti svi rekli da treba da procitas dobar deo literature oko programskih prevodilaca i da naucis sta su leksicka, sintaksna i semanticka analiza. Posle analize jezika ide i njegova sinteza (prevodjenje u medjukod, optimizacija medjukoda, pa prevodjenje u asemblerski jezik i opet njegova optimizacija).
Jeste da ce ti ovo oduzeti dosta vremena, ali bolje ovako, nego da tu negde na pola projekta shvatis da nisi uzeo sve mogucnosti u opticaju (i shift-deletujes sve sto si radio), a ucenje na ovaj "tenicki" nacin je, kako se kaze, bullet-proof na razlicite greske. Mada ti hoces da kod prevedes u C pa onda da zoves gcc... To sto ti pravis se zove parser jezika (samo analiza bez sinteze). Preporucujem ti da naucis kako se zadaje gramatika jezika, da posle napravis neki tokenizer i na kraju uradis sintaksnu analizu koji je i najtezi deo. Preporucujem da koristis Bottom-up analizu (LR(1) parser), jer najbolje resava te probleme uz minimalne (ili nikakve) promene nad postojecom gramatikom (problem leve rekurzije i itd...). Lex i Yacc : odlican pocetak da naucis osnove kompajlera je preko ovih generatora. |
![]() |
![]() |
![]() |
Bookmarks sajtovi |
Alatke vezane za temu | |
Vrste prikaza | |
|
|
![]() |
||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Language bar | DobroslaV | Operativni sistemi | 8 | 1.6.2007 21:10 |