Voglio creare una nuova lingua [duplicato]

5

Voglio creare un nuovo linguaggio generico che verrà compilato in JavaScript e mi piacerebbe poterlo scrivere nello stesso JavaScript.

Non vorrei dare molti dettagli sul perché, ma come posso farlo? Attualmente ho codificato professionalmente in JS, Java, Groovy, PL / SQL, PHP tra gli altri, quindi sono coperto dal lato utente della lingua della storia, ma non ho conoscenze teoriche o pratiche dal lato della lingua di creazione.

Ho navigato sul web per la scorsa settimana e ho notato una zuppa di acronimi e / o nomi come RR, LALR, BNF, AST ecc. quindi immagino di aver bisogno di due cose:

  • Buoni libri sulla teoria
  • Progetti di lavoro o esperimenti che posso utilizzare per far partire il mio apprendimento (qualcosa di gratuito come narcis )

EDIT:

No, questa domanda non copre il contenuto ESATTAMENTE STESSO e non è ancora sullo stesso argomento, anche se ci sono due buone risposte, non rispondono come posso praticamente USARE JS PER COSTRUIRE GLI STRUMENTI (JS TRANSPILER) HO BISOGNO DELLA NUOVA LINGUA.

Qualche idea?

    
posta Azder 15.08.2012 - 08:37
fonte

2 risposte

15

Per prima cosa, dimentica LALR e le altre parole intimidatorie associate ai draghi. C'è una bella e amichevole, ecco: PEG . Un'implementazione pronta all'uso per JavaScript è disponibile .

Dopo aver terminato l'analisi, dovrai trasformare il tuo Abstract Syntax Tree in uno o più passaggi in un AST di JavaScript e serializzarlo in testo. Ci sono molte scuole di pensiero in quest'area, ma la mia preferenza personale è usare il molto semplice e ovvio riscrittura dei termini . Puoi trarre ispirazione da cose come questo .

Un puro JavaScript non modificato non è del tutto adatto all'implementazione immediata dei compilatori, dal momento che non fornisce alcuna possibilità di corrispondenza di pattern decente, quindi consiglierei di implementare un livello eDSL come sopra prima di iniziare a implementare le tue trasformazioni linguistiche.

A seconda del tipo di sistema che avrà la tua lingua sorgente, potresti voler implementare vari tipi di algoritmi di digitazione. Per alcuni dei pratici sistemi di tipo rigoroso, un Prolog incorporato può essere di grande aiuto. Ad esempio, implementare un algoritmo Hindley-Milner in Prolog è banale. Altrimenti, sarà sufficiente una semplice propagazione del tipo implementata con riscrittura di breve termine.

Se vuoi eseguire alcune ottimizzazioni, considera l'utilizzo di rappresentazioni intermedie come SSA o CPS . Potresti aver bisogno di una libreria di gestione grafica decente per questo.

    
risposta data 15.08.2012 - 08:55
fonte
6

È stato detto che Jeremy Ashkenas è stato ispirato a creare CoffeeScript dopo aver letto questo molto libro . Dato che CoffeeScript è una delle lingue più popolari per javascript come lingua di destinazione, immagino che tu possa trovare anche alcune informazioni utili lì.

    
risposta data 15.08.2012 - 09:58
fonte

Leggi altre domande sui tag