Aer - compilator self-hosting - Soft - Bucuresti - 2010 Nationala

Informatii generale

  • Categorie: Soft
  • Judetul: Bucuresti

Descriere

Aer este un limbj de programare minimal, creat pentru studiul compilatoarelor. Compilatorul sau se poate compila singur, demonstrand potenta limbajului. Aer foloseste o stiva de numere intregi, aratand o oarecare similitudine cu FORTH.

Tehnologii

ANSI C

Cerinte sistem

Realizatori

Dumitru Vlad-Andrei

  • Scoala: Colegiul National Mihai Viteazul
  • Clasa: a 9-a
  • Judet: Bucuresti

Screenshots

Bun venit pe InfoEducatie, interesanta lucrare, PrintScreenul nu este concludent pentru marea majoritate. Ai putea sa uploadezi altele?

Stiu ca PrintScreenul nu arata prea multe, dar chiar nu stiu ce as putea sa arat la un compilator. Daca ai vreo idee, eu ascult orice. Oricum, mersi pentru feedback!

Eventual ceva cod compilabil sau o aplicatie facuta in acest limbaj…
Compilatorul poate fi o racheta dar trebuie sa si demonstrezi ca poate multe(chiar si daca nu poate) altfel nu vei fi crezut.
VInde-ti produsul.

Da, cum spune si Sanctus2099

Stiu ca pare ciudat postul meu, si offtopic, dar iti pot da exemplu de un printscreen si o descriere mai succinta din perspectiva mea.

Si eu lucrez la un proiect asemanator:
In Borland Delphi(Pascal) incerc sa fac un limbaj de scripting(nu compileaza/doar interpreteaza). Ideea este ca incerc sa combin mai multe paradigme: Programare procedurala; Retele Neuronale Artificiale atat MLP, poate si alte retele; Programare logica[trebuie foarte mult citit]; Proiectul nu va fi gata pana anul viitor(nu o sa il prezint acuma)

Syntaxa arata asemanator cu C++, dar nu permite multe elemente:
Nu pot face atribuiri in operati gen i=++j, sau functie(++j); In If nu permite ==(deci nu pot , din forma poloneza pe care am implementat-o, am supraincarcat unde folosesc =), tot din cauza formei poloneze for-ul arata diferit :d, fix la in pascal; Permite recursivitate, expresii complicate. Declararea functilor e diferita, inca nu permite struct. Infara de Skin(am o boala cu skinurile) totul este implementat de mine in Delphi-ul standard, si este orientat si pe CLX sa functioneze pe Linux.

Edit:
Ai folosit in programul tau, notiuni din teoria compilarii: automate finite, limbaje formale, gramatici chomsky, translatoare, arbori asociati. Parerea mea ca din toate cartile de informatica pe care le-am citit, cele de teoria compilarii mi s-au parut cea mai inacesibile. In geneal cei care scriu compilatoare respecta un algoritm conform acestei teorii, si rezultatul este 100%, problema este ca se invata foarte dificil.

Si eu lucrez la un proiect asemanator: In Borland Delphi(Pascal) incerc sa fac un limbaj de scripting

:laughing: Total off topic.

Am făcut un scurt document în care prezint limbajul: http://jafile.com/uploads/deveah/doc-aer.pdf.
După cum scrie și acolo, nu e în faza finală, deci aștept sugestii, corecturi, orice!

Hello deveah,

Putem sa-l descarcam sa facem si noi niste programele in el pana la Galaciuc? Sau sa-ncercam sa-l facem sa crape?
:smile:

Adi

gigaevil
Zweistein

Hello deveah,

Putem sa-l descarcam sa facem si noi niste programele in el pana la Galaciuc? Sau sa-ncercam sa-l facem sa crape?
:smile:

Adi



Sursa in C de la software se gaseste chiar pe contul lui http://jafile.com/uploads/deveah/ac.c

iar sursa creata pentru "limbajul" Aer este aici http://jafile.com/uploads/deveah/ac.txt

Trb sa te cunosti cu asm-ul. Bye the way n-are ce crapa.

M-am uitat peste cod, iar din descriere am inteles ca "executabilele" create de software, ruleaza si pe Linux si pe Windows. Dar nu am inteles cum creaza MZP(headerul pentru executabil) pentru Windows... in fine poate va prindeti voi din sursa.
@gigaevil: No offense, dar... FAIL!
timotei21
gigaevil
Zweistein

Hello deveah,

Putem sa-l descarcam sa facem si noi niste programele in el pana la Galaciuc? Sau sa-ncercam sa-l facem sa crape?
:smile:

Adi



Sursa in C de la software se gaseste chiar pe contul lui http://jafile.com/uploads/deveah/ac.c

iar sursa creata pentru "limbajul" Aer este aici http://jafile.com/uploads/deveah/ac.txt

Trb sa te cunosti cu asm-ul. Bye the way n-are ce crapa.

M-am uitat peste cod, iar din descriere am inteles ca "executabilele" create de software, ruleaza si pe Linux si pe Windows. Dar nu am inteles cum creaza MZP(headerul pentru executabil) pentru Windows... in fine poate va prindeti voi din sursa.
@gigaevil: No offense, dar... FAIL!
second'd

Trecand peste micile ironii corect sau incorect folosite. Imi place foarte mult proiectul chiar daca este in principal, sau asa pare, un POC - proof of concept. Pana la urma arati o idee si cum poate fi folosita, ceea ce este foarte util chiar daca prea multi, probabil, te vor acuza de faptul ca proiectul nu are finalitate.
Din punctul meu de vedere, bravo!

Apropo, Ionut nu dovedesti nimic prin faptul ca ne-ai aratat unde se afla sursa si nici prin proiectul tau neterminat si nici prin ceea ce vrei sa faci cand “vei fi mare”. Fiecare isi prezinta proiectul lui, in topicul lui, la momentul potrivit.

Eu consider ca posturile mele au fost cat se poate la obiect:
un compilator, inseamna: analiza sintactica, gramatici formale, automate cu stari finite, determinism, gramatici chomsky, arbori de decizie, multe translatoare si dupa aceea inseamna generare cod masina. Intrebarea a fost clara cate dintre acestea exista in program - raspuns nici una. Din cate am inteles in Aer este un trick, nu poate functiona fara compilatorul de Ansi C, nu poate executa nimic, deoarece el apeleaza functii gata link-editate, din librarile C. Nu am primit nici un raspuns. Dupa cate inteleg programul se recompileaza pentru ca si C, se poate recompila singur. Fara C nu recompileaza nimic, precum nici C nu poate fi recompilat(self-hosting) fara a avea instalat un compilator de C. Asta am inteles si sunt sigur.

Citat din codul sursa
if ( cc == ‘@’ )
/* Comandă ce apelează la o funcție externă. /
{
/
Are nevoie de un cuvânt (identificatorul funcției) */
m = 3;

fprintf ( fout, "\tcall " );
}[/quote:1atlomrj]
[quote:1atlomrj]Citat din documentatie
1. Construim compilatorul original:
$ gcc ac.c -o ac
2. Construim compilatorul scris în Aer:
$ ./ac a2.txt a2.s
$ gcc -x assembler a2.s -o a2
3. Compilatorul scris în Aer citește fișierul sursă din in.txt, așa că
acum copiem fișierul a2.txt, compilatorul scris în Aer, în in.txt:
$ cp a2.txt in.txt
4. Executăm a2
$ ./a2
5. diff este un program care afișează diferențele dintre două fișiere.
Acum verificăm diferențele dintre a2.s, compilat de programul inițial, scris
în ANSI C, și out.s, compilat de programul scris în Aer:
$ diff out.s a2.s
$
Nu există nicio diferentă, asta dovedind că am produs același
compilator atât în ANSI C, cât și în Aer. De aici self-hosting.

Normal ca daca apelezi o functie, din C si dupa aceea o chemi din Aer aceeasi functie, si te uiti la rezultate ca sunt identice. nu inseamna ca programul tau este o translatare a C-ului. Si normal ca prin aceasta metoda, puteai sa executi orice functie din C, era interesant sa o poti scrii tu, si sa nu o chemi din C, am inteles ca poti apela orice functie din C

Nu am zis nicio secunda ca e ceva care revolutioneaza. Imi aminteste intr-o forma mai simplificata de eniAsm - nici nu putea fi altfel data fiind varsta participantului, proiect care a participat acum doi ani in cadrul Infoeducatie.
Ca sa intelegi si sa te opresti din a da termeni copiati de pe Google pe care intr-o mica masura ii intelegi cu adevarat - si sunt sigur de asta:
Nu exista niciun trick in proiect. Realizatorul a vrut sa ofere o forma simplificata ASMului. Nu exista nicio functie apelata de el care sa ii simplifice munca. El doar scrie in fisier cu fprintf, atat, asta e marea functie de care se foloseste. Se specifica clar in documentatie ca sursa, odata generata in forma ASM va trebui compilata cu GCC. Practic, el transforma sursa lui in ASM pe care oricine o poate compila. Te rog frumos sa iti documentezi replicile, ori eu, cel putin, voi fi nevoit sa privesc cu scepticism orice fel de cod din partea ta.

Ca sa intelegi si sa te opresti din a da termeni copiati de pe Google pe care intr-o mica masura ii intelegi cu adevarat

Eu zic ca am postat o lucrare in concurs, care contine multe notiuni de teoria compilarii, Logicus, care chiar daca nu este un compilator propriu zis, reuseste sa interpreteze schema logica, sa genereze cod sursa(ma rog un compilator genereaza un cod asm translatat echivalent cu codul sursa introdus)si care utilizeaza multe concepte de teoria compilarii...contine analiza sintatica,tabela de variabile, translatare in cod echivalent ,creare graf echivalent ,parcurgere etc...
Te astept pe messenger, daca doresti sa discutam mai multe.

In fine, eu imi urmez visul in continuare, la fel cum ti-ai urmat visul cu criptografia si securitatea de ani de zile.
Bafta la Royal College, si sper sa ne intalnim peste ani de zile, intr-o multinationala.

Nu am nimic cu visurile nimanui. Ideea e sa ne oprim atunci cand trebuie si sa ne rezumam la un feedback real nu la etalare.

Revenind la proiectul in discutie, sugestia mea se refera la crearea unui mic IDE care ar usura munca userului. Alta idee e sa creezi, folosindu-te de Visual Studio SDK, un plugin astfel incat sa il integrezi in acest mediu. De asemenea, poti cauta documentatie despre cum sa faci astfel de pluginuri si pentru alte medii de dezvoltare. Poate merge si pentru Eclipse? Ar trebui. Google it!

PS: @gigaevil: Este vorba de Imperial College.

dranaxum

sa te opresti din a da termeni copiati de pe Google pe care intr-o mica masura ii intelegi cu adevarat


:laughing: scurt. @gigaevil, ar fi frumos sa nu raspunzi in locul participantului, si mai ales in afara subiectului (mult). ti-am mai atras atentia.

Dragă Gigaevil, îţi mulţumesc pentru interes.

gigaevil

Eu consider ca posturile mele au fost cat se poate la obiect:
un compilator, inseamna: analiza sintactica, gramatici formale, automate cu stari finite, determinism, gramatici chomsky, arbori de decizie, multe translatoare si dupa aceea inseamna generare cod masina. Intrebarea a fost clara cate dintre acestea exista in program - raspuns nici una.



Într-adevăr, nu am folosit acele tehnici, pentru că nu mi-au folosit. Nu ştiu dacă există deja un termen pentru un astfel de compilator, aşa că eu îl numesc hit-and-run – pur şi simplu traduce fiecare cuvânt, pe rând. De exemplu, pentru a compila următorul cod ( în FORTH ):
1 2 +
la ce mi-ar folosi tehnicile enumerate de tine, când pot pur şi simplu să traduc în:
pushl $1
pushl $2
# +:
popl %eax
popl %ebx
addl %ebx
pushl %eax

?

gigaevil

Din cate am inteles in Aer este un trick, nu poate functiona fara compilatorul de Ansi C, nu poate executa nimic, deoarece el apeleaza functii gata link-editate, din librarile C.



Fals. Aer nu foloseşte compilatorul de ANSI C, ci assemblerul GAS. Eu invoc
gcc -x assembler
pentru că gcc îmi leagă codul de libc, ca să nu mai fiu nevoit să scriu comenzi kilometrice.

gigaevil

Nu am primit nici un raspuns.



Mda, am plecat şi eu pe la munte :smiley:

gigaevil

Dupa cate inteleg programul se recompileaza pentru ca si C, se poate recompila singur.



Iar fals. Nu are nicio legătură cu natura C-ului.

gigaevil


Fara C nu recompileaza nimic, precum nici C nu poate fi recompilat(self-hosting) fara a avea instalat un compilator de C. Asta am inteles si sunt sigur.

Normal ca daca apelezi o functie, din C si dupa aceea o chemi din Aer aceeasi functie, si te uiti la rezultate ca sunt identice. nu inseamna ca programul tau este o translatare a C-ului. Si normal ca prin aceasta metoda, puteai sa executi orice functie din C, era interesant sa o poti scrii tu, si sa nu o chemi din C, am inteles ca poti apela orice functie din C.



Nu chem funcţiile din C, le chem pe cele din libc.
Am zis să nu reinventez roata. În fond, la ce mi-ar folosi să rescriu ceva precum libc? Orice sistem Linux are aşa ceva, şi cum eu folosesc Linux, am zis să nu mă complic.

Oricum, http://jafile.com/uploads/deveah/ac.c este incomplet. De la versiunea aia am mai adăugat câteva chestii.

Dar mersi pentru interes. Numai bine!

@deveah Multumim frumos pentru clarificari! :smiley:

Multumesc pentru raspuns, vad ca s-a ajuns la jigniri. Toate comentarile mele au fost referitoare la lucrare ta, si sunt convins ca foarte putini au inteles despre ce este vorba.

Multa bafta.

Salut!
Proiectul tau este foarte tare!!!
@gigaevil Cati bani ai la tine? Du-te si ia-ti o viata!