1
Familiarizați-vă cu terminologia. Persoanele care programează un compilator folosesc de obicei niște termeni complicați, deci este important să citiți puțin despre el înainte de a continua. Încercați să aflați tot ce aveți nevoie.
2
Definiți ce problemă va rezolva limba dvs. Va fi vorba de domeniu sau de scop general?
3
Gândiți-vă la semantica limbii dvs. și la conceptele legate de ea.- Veți permite accesul direct la indicii?
- Care vor fi tipurile de date de limbă?
- Este o limbă statică sau dinamică?
- Care va fi modelul de memorie? Veți folosi a colector de gunoi (colector de gunoi) sau ar trebui ca memoria să fie gestionată manual? Atunci când utilizați a colector de gunoi, puteți programa una de la zero sau puteți adapta una care există deja pentru limba dvs.
- Cum veți face față concurenței? Veți implementa un șablon simplu bazat pe fire și excluderea reciprocă sau ceva mai complex ca modelele Linda și Actor? Este o decizie importantă, deoarece calculatoarele de astăzi au mai multe nuclee de procesare.
- Vor exista funcții primitive de limbă nativă sau va veni totul din biblioteci?
- Care va fi paradigma sau paradigmele limbajului? Funcțională? Obiect orientat? Bazat pe prototipuri (cum ar fi jаvascript)? orientate spre aspect? template-Oriented? Poate ceva cu totul nou?
- Cum va integra limba cu bibliotecile existente (în special bibliotecile C)? Acest lucru este foarte important atunci când dezvoltați un limbaj de domeniu specific.
- Răspunsul la aceste întrebări vă va ajuta foarte mult în următoarele etape ale dezvoltării limbajului.
4
Gândiți-vă la sarcinile simple pe care oamenii le-ar putea face cu limba lor. Ei ar putea dori, de exemplu, "a face un robot să urmeze o linie", "a crea programe relativ portabile pentru desktop-uri" sau "a crea aplicații web".
5
Testați cu idei de sintaxă (textul lingvistic) pentru exemplele de mai sus.- Nu uitați să încercați să păstrați limba în categoria fără contexte sau în altă categorie în cadrul acesteia. Generatorul dvs. parser vă mulțumesc în viitor.
6
Scrieți o gramatică formală pentru sintaxa.
7
Decideți dacă limba va fi interpretată compilate. Diferența este că, într-o limbă interpretată, utilizatorul va edita în general programul printr-un editor și îl va rula direct în interpret. Deja într-o limbă compilată, utilizatorul va edita programul, apoi îl va compila, va salva executabilul undeva și va executa în final.
8
Scrieți scaner frontal și parser sau găsiți un instrument care să vă ajute în acest proces.- De asemenea, încercați să definiți dacă compilatorul sau interpretul va avertiza utilizatorul la erori sau sintaxă de programare.
9
Utilizați informațiile generate de parser pentru a scrie codul obiect sau o reprezentare intermediară. Faceți parserul să creeze un AST, apoi să creați obiectul de la AST folosind codul de trei adrese sau fratele vostru mai mare, SSA. În cele din urmă, creați o tabelă de simboluri pentru a defini funcții, variabile globale și așa mai departe.
- În funcție de limbă, puteți prefera să creați tabele de indicatori virtuali sau tabele de informații pentru clase (pentru a sprijini reflecția sau RTTI).
10
Scrieți executorul sau un generator de cod care va pune totul împreună.
11
Scrie programe de testare pentru a testa limba.- Idealul este să creați programe care împing limitele limbii dvs. oficiale la margine pentru a vedea dacă compilatorul acceptă tot ceea ce este în definiția sa și respinge totul în afara ei.
12
Definiți modul în care utilizatorul își va "debuga" programele.
13
Dacă limba utilizează o bibliotecă standard, trebuie să o programați. Veți avea nevoie, de asemenea, să scrieți
colector de gunoi și, dacă este necesar, alte instrumente de execuție.
- Când scrieți un compilator, trebuie să setați codul pe care sistemul de operare îl va rula pentru a începe executarea codului de utilizator (de exemplu, alocarea tuturor variabilelor globale).
14
Postați limba împreună cu specificațiile ei și câteva exemple care arată ce poate face.- Nu uitați să documentați cum va fi integrarea cu bibliotecile și limbile existente și cum să utilizați caracteristicile de rulare și de bibliotecă implicită.