Închis . Această întrebare trebuie să fie mai concentrată
. În prezent, nu acceptă răspunsuri.
Comentarii
Răspuns
Să spunem că scrieți un nou limbaj de programare numit „XYZ”. Primul pas este să scrieți un compilator pentru acest limbaj. Deoarece acest nou limbaj nu există încă, scrieți compilatorul în … să spunem java. Îl vom numi jxyz. Realizarea acestui proces este o clasă tipică în facultate .
Acum aveți un program java (jxyz) care ia un fișier sursă XYZ și produce un executabil. Apoi este posibil să întreprindeți scrierea unui compilator pentru XYZ în XYZ care este respectat de jxyz.
În acest moment, aveți un autor pentru XYZ care a fost respectat cu jxyz. Ei bine, numiți acest program „xyzFromJ”.
„xyzFromJ” ar trebui să poată lua sine ca intrare și să se compileze complet eliminând orice a creat de jxyz din dependențele și definiția limbajului. Din acest moment, orice modificare a limbajului XYZ poate fi făcută pe compilatorul scris în XYZ și compilat folosind el însuși.
Răspuns
Pasul 1. Scrieți compilatorul într-o altă limbă.
Pasul 2. Compilați codul de la Pasul 1.
Pasul 3. Scrieți compilatorul în aceeași limbă.
Pasul 4. Compilați codul din pasul 3.
Repetați pașii 3-4 pentru orice actualizări ulterioare ale compilatorului dvs.
Rețineți că pașii 1 și 3 pot avea loc simultan sau într-o ordine diferită.
Recunosc că aceasta este o simplificare excesivă.
Comentarii
Răspuns
Spre deosebire de alte răspunsuri care sugerează scrierea compilatorului în altă limbă (unul presupus care rulează pe aceeași mașină pe care o vizați), este, de asemenea, posibil (de fapt, de preferat) să scrieți compilatorul în limba țintă de la început.
Spuneți că doriți să scrieți un compilator pentru C pentru un procesor ARM. Aveți deja un compilator C care rulează pe Windows (arhitectură Intel). Scrieți noul dvs. compilator în C, atât front end (analiză lexicală și analiză), cât și back end (generare de cod). Back-end-ul, desigur, este scris pentru a genera cod pentru ARM, nu pentru Intel.
Apoi compilați sursa pentru noul compilator cu compilatorul existent. După ce sunteți mulțumit că compilatorul generează cod valid pentru ARM, luați codul ARM compilat și îl rulați pe arhitectura ARM țintă. Acum aveți sursa pentru noul compilator, care poate fi modificat și introdus în executabil și generează o nouă versiune.
Acest proces se numește compilare încrucișată. Avantajul este că aveți doar să scrieți compilatorul o dată.
Răspundeți
dintr-un alt răspuns:
Step 1. Write your compiler in a different language. Step 2. Compile the code from Step 1. Step 3. Write your compiler in the same language. Step 4. Compile the code from step 3.
Pașii 1 și 2 sunt necesari doar pentru „primul compilator vreodată” pentru o nouă limbă. Există o mulțime de variații la pașii 3 și 4, astfel încât, de exemplu, puteți scrie generatorul de cod pentru o nouă arhitectură, compilați încrucișat, apoi rulați același compilator pe o mașină nouă.Sau puteți extinde compilatorul pentru a gestiona sintaxa și construcțiile noi fără a utiliza niciuna dintre extensii, apoi rescrieți compilatorul pentru a utiliza extensiile și compila singur.