"

 Metakääntäjä 

Hay Näen, että olet osallistunut kääntäjän-kääntäjän ja metakääntäjän sivulle lisäämällä CWIC-aiheen.

Näyttää siltä, että metakääntäjän aiheen alullepanija on tarkoittanut sen sisältävän metakääntäjän tai ainakin käyttää metakääntäjän ajatusta, joka sanoo, että koska se kääntää itse itsensä, se on esim.

Itsensä määritteleminen ja kääntäminen tällä tavoin muodostaa metavaiheen, joka erottaa metakääntäjän muista kääntäjäkääntäjistä.

Yleinen sanonta FORTH-sivustoilla. Erityisesti ""meta step"" Tosiasia on, että LISP kääntää itsensä käytännössä samalla identtisellä tavalla kuin Forth.

Itse isännöivät kääntäjät ovat yleisiä. Useimmat yleiskielikääntäjät ovat itseohjautuvia. Huomautin, että monet kääntäjistä, joita kirjoitin tai joiden parissa työskentelin, käänsivät itse itsensä. Itse asiassa itsepalvelukääntäjien alkuvaiheet ovat samat kuin kuvattu. Johdin Kontron Electronicsin kielikehitysryhmää. Monet konsolipelit kirjoitettiin käyttämällä meidän kääntäjiämme. Kaikki kääntäjät kirjoitettiin laajennetulla PASCAL-kielellä. Joka käynnistettiin tyhjästä. Useimmat olivat ristiinkääntäjiä prosessoreille, joita piiriemulaattorimme tukivat. Itse asiassa aloitin FutureDatassa, jonka GenRad osti ja myi sitten Kontronille.

Itsehallinnoitava metakääntäjä on paljon helpompi käynnistää kuin yleiskieli.
 
Historiallisesti metakääntäjät olivat kääntäjäkääntäjiä. Kääntäjä-kääntäjä oli yleinen termi, jota käytettiin 60-luvulla Sitten yacc yuked, joka on jäsentimen generaattori. Ja kutsui itseään Yet Another Compiler Compileriksi. Verrattuna 60-luvun kääntäjäkääntäjiin yacc on vain hacc. Puoliksi kääntäjä-kääntäjä. Minun termini oli Half Ass Compiler Compiler Compiler. On olemassa yacc:n toteutuksia, jotka käyttävät yacc:tä itsensä kääntämiseen. Joten metacompiler (vanha versio) ei ole oikeastaan erottanut itseään muista kääntäjäkompilaattoreista. Tämän kirjoituksen alussa olen lisännyt metakompilaattoreiden määritelmän. [Sci-Tech Dictionary McGraw-Hill Dictionary of Scientific and Technical Terms, 6th edition, published by The McGraw-Hill Companies, Inc. http://www.answers.com/topic/metacompiler] sanoo selvästi "" A metacompilers is a compiler that is chiefly used to construct compilers for other programming languages.""".

Olemme joutuneet liekkisotaan metakääntäjän keskustelusivulla ominaisuuden määrittelystä:

""Piirre, joka erottaa metakääntäjän tavallisesta kääntäjä-kääntäjästä, on se, että metakääntäjä on kirjoitettu omalla kielellään ja kääntää itse itsensä.""" 
Itsensä määritteleminen ja kääntäminen tällä tavoin muodostaa metavaiheen, joka erottaa metakääntäjän muista kääntäjäkääntäjistä.

On totta, että metakääntäjä yleensä määrittelee itsensä. Mutta kaikki metakompilaattorit eivät eri syistä olleet itseohjautuvia. Damon todella suuttui, kun löysin PL/1-kielellä kirjoitetun metakompilerin viitteestä, jonka hän antoi todistaakseen kantansa. Hän puhui siitä, että tulkitsin väärin hänen en tiedä mitä.

Kääntäjä-kääntäjä, syntaksisuuntautunut kääntäjä ja metakääntäjä liittyvät kaikki läheisesti toisiinsa. Ja aikoinaan ne olivat sama asia. Erottelutekijöitä tarvitaan, jos ne todella ovat erillisiä aiheita.

Vuosien varrella on ollut monia metakääntäjiä, joita kutsutaan metakääntäjiksi. Jotkut kuten BOOK1, BOOK2 ja CWIC ovat metakääntäjiä Varhainen metakääntäjä, joka ei kutsunut itseään metakääntäjäksi, oli:

""A compiler-building system developed by Brooker and Morris"" Brooker and Morris, Communications of the ACM Volume 7 Issue 7, July 1964 Siinä on jäsentelykieli ""BNF"" ja koneen kuvauskieli ""MDL""." Siinä on välivaiheen ""GSL"" sukupolvi Strategy L:anguage.

CWIC perustui osittain Schorren META-kääntäjiin ja osittain SDC:ssä kehitettyyn LISP2:een. Syntaksikieli sisältää ominaisuuksia TREE META:sta. On epäselvää, onko Schorre työskennellyt TREE META:n parissa. Stanfordin tutkimusasiakirjassa ei mainita Schorrea. 

Toteutin laajennetun CWIC-kääntäjän kääntäjän DEC-System-10:llä vuosina 1969-72. Lisäsin koneen kuvauskielen ja loin pseudo-operaatiokielen (makrojen kaltaisia funktioita, joissa käytettiin suurinta osaa CWIC-generaattorin tuotantokielestä). Tunnen hyvin, miten CWIC toimi. Olen siirtynyt käyttämään TREE META -terminologiaa, jossa käytetään unparse-sääntöjä CWIC:n dokumentaatiossa käytetyn pattern matchingin sijasta. Säännöt ovat itse asiassa rekursiivisia EVAL(ADD[EVAL(X),EVAL(Y)])=> EVAL kutsuu itseään puun jaloissa ja palauttaa paikalliset muuttujat X:ssä ja Y:ssä. Tämä on myös tree metan ominaisuus, paitsi että tree metassa ei ole paikallisia muuttujia.

Aloitin RFC:n ja tein sen luultavasti väärin, koska siellä ei ole ollut muita kommentteja kuin meidän kinasteluamme.

Val Schorre toimitti 80-luvulla SegForthin ACM-ryhmässä papereita. Val sanoi, että forth ei ole metakääntäjä hänen kotisivuillaan (nyt hävinnyt, joten ei voi viitata).

Tämä kenttä o