PDA

Prikaži potpunu verziju : Mpl iliti mine programming language :)


nika100
16.8.2007, 1:14
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.

veverica
16.8.2007, 1:35
Jedva cekam da vidim shta ce biti od ovoga

btw. puno srece ^_^

nika100
16.8.2007, 1:38
Hvala :).
Bice nesto :D... Nadam se dobro....

seymourc64
16.8.2007, 12:28
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 :)

LoneWolf
16.8.2007, 18:01
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 :icon_stud pa polako.

voodoo_
16.8.2007, 18:24
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.
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).

nika100
16.8.2007, 18:43
Ja sam i hteo prvo da napisem MY, nego su me istripovali da je mine ispravnije :)

Deusdies
16.8.2007, 20:07
E super. Puno ti sreće želim. Posle mogu da se hvalim kako poznajem autora MPL :D (nika100, upoznali smo se: dao si mi Mandrake 10 kod Zelengore, sećaš se? :D)

rile
16.8.2007, 20:12
Preporučujem ti da uzmeš ANTLR i praviš svoj MPL u tome umesto u VB-ju.

nika100
16.8.2007, 21:56
@Dellion:
A, da secam se.
Dobro, od ove godine idemo i u istu skolu, osim ako nisi zavrsio 4.godinu :D
@Rile:
Sta je to?

rile
16.8.2007, 23:19
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++.

M.Silenus
17.8.2007, 10:01
Pogledaj neku od sledećih knjiga:
Compilers: Principles, Techniques, and Tools (http://en.wikipedia.org/wiki/Compilers:_Principles%2C_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 (http://www.cs.princeton.edu/~appel/modern/), 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' :D ), pa uživaj.

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)

nika100
17.8.2007, 16:27
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.

aljoshaaa
17.8.2007, 17:19
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 ?

nika100
17.8.2007, 17:22
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.

aljoshaaa
17.8.2007, 17:24
Mislis ovo ... http://www.sk.co.yu/forum/showthread.php?t=6930&highlight=alc0h0l

seymourc64
17.8.2007, 17:38
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...

liska
25.10.2008, 19:57
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 :)

Vidim da pominjes lex pa bih i ja nesto konkretno pitala ako je neko spreman da odgovori :)

JBlitzkrieg
28.10.2008, 15:25
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.