2010-07-15 16 views

risposta

9

Sì, è possibile. Controlla BootStrapping.

+0

+1 Mi stavo tormentando (e andando su Google) per cercare quel termine. Ho vagamente ricordato qualcosa sui compilatori C che sono stati successivamente implementati in sé. –

12

Sempre. Qualsiasi lingua Turing-Complete è - beh - una lingua di Turing-Complete. Se puoi scrivere il compilatore in una lingua completa, puoi scriverlo in qualsiasi lingua equivalente.

+0

Anche alcune lingue di Turing-Complete potrebbero avere limitazioni, a seconda di cosa intendiamo con "implementare". Immagina un linguaggio completo di Turing in grado di inserire e stampare solo testo ASCII normale. Un tale linguaggio non sarebbe in grado di generare un binario eseguibile e quindi non sarebbe in grado di costruire il proprio interprete "indipendente". –

+0

[File di testo ASCII eseguibili] (https://astr0baby.wordpress.com/2012/08/31/executable-ascii-files-pt-2/) – barbecue

3

Sì. Finché la lingua è Turing Complete, puoi implementare la lingua in sé.

+1

La completezza della Turing non è un requisito rigorosamente IIRC. Ma le attuali lingue incomplete di Turing (Regex, SQL e simili) sono ancora insufficienti. –

+0

È possibile leggere un'espressione regolare utilizzando regex, ma penso che sia impossibile creare un'implementazione di espressioni regolari utilizzandola. La completezza della teoria è la teoria, per scrivere un compilatore Java è necessario manipolare i bit e scrivere su disco (Java può farlo). – tovare

+2

@tovare: in realtà non si può nemmeno [verificare regex usando regex] (http://stackoverflow.com/questions/172303/is-there-a-regular-expression-to-detect-a-valid-regular-expression/172363 # 172363) (ad esempio, la lingua che usiamo per specificare le lingue regolari non è regolare)! –

1

Non solo è possibile. ecj (il compilatore di Eclipse) è un esempio, e penso che l'SDK stesso abbia un compilatore Java puro, anche se potrei sbagliarmi.

7

Sì per qualsiasi lingua di Turing Complete. Lisp viene in mente come uno dei linguaggi più semplici per scrivere un interprete/compilatore per se stesso.

6

Può. Un esempio recente è che python ha pypy. Un po 'più di informazioni è sulla pagina di Wikipedia e alcuni buoni link.

+0

AFAIK Pypy non interpreta, compila la VM. – mathk

+1

Pypy è un interprete Python scritto in un sottoinsieme ridotto di Python (RPython). Tuttavia, il progetto può costruire una versione C e persino un JITC di tracciamento eseguendo le trasformazioni sul sorgente RPython. –

+0

Sì, ma Pypy può interpretare la progettazione della VM? – mathk

0

Certo. Ho persino visto qualcuno scrivere un compilatore COBOL scritto in COBOL! (OK, non un compilatore completo ... ma almeno un parser.)

4

Sicuro.

Molti anni fa uno dei miei primi computer domestici, un Vic 20, era dotato di un interprete BASIC incorporato, ma era così. Così ho scritto la prima versione di un assemblatore per questo in BASIC. Quindi ho usato il mio primo assemblatore primitivo per scrivere un assemblatore migliore.

+0

+1 per aver menzionato un vecchio classico 8-bitter! :-) – monojohnny

+0

@monojohnny Le schede perforate stanno tornando. Questa roba USB è solo una moda passeggera. :-) – Jay

2

I compilatori GCC sono scritti in C.

E 'stato un lungo periodo di tempo da quando qualcuno costruito eventuali compilatori C dal gruppo.

1

scrivere un compilatore java in java - nessun problema. in realtà penso che il javac di Sun sia scritto in java.

tuttavia, "java" di solito significa più cose che solo il javac, quindi la tua domanda non è molto chiara.

Problemi correlati