2010-11-03 25 views
6

Possibili duplicati:
Methodologies for designing a simple programming language
Learning to write a compilerCome andresti a scrivere un semplice linguaggio di programmazione?

vorrei scrivere un linguaggio di programmazione con una sintassi simile a QBasic, ma ancora più semplice. Voglio che sia per i programmatori principianti. La sua semplicità incoraggerà gli aspiranti programmatori a non arrendersi e ad interessarli alla programmazione. Ad esempio: Invece di QBasic's STAMPA "Hello World!"

Vorrei utilizzare

Scrivere "Hello World!"

o un po 'più simile a VB

Write ("Ciao Mondo")

Come potrei fare per adattare la sintassi di base per rendere la mia lingua?

+0

Possibile duplicato di http://stackoverflow.com/q/1208338/246069 – YWE

+0

"La sua semplicità incoraggerà gli aspiranti programmatori a non mollare e ad interessarli alla programmazione." - Non per scoraggiarti, ma linguaggi semplicistici tendono a mettersi sulla tua strada dopo poco tempo. Preferisco le lingue che sono * semplici *, ma non mancano per compiti più grandi/più sofisticati (in particolare, Python). A parte questo, stai chiedendo come dovrebbe essere la sintassi, o vuoi suggerimenti su come effettivamente analizzarlo? – delnan

+0

Hai ragione. Ho iniziato l'anno scorso a studiare BASIC e mi sono davvero divertito così ora sto cercando di imparare C così posso fare una programmazione più profonda. Ho anche imparato le basi visive. Tuttavia, penso che se riesco in qualche modo a modificare la sintassi di base, potrei aggiungere anche i miei comandi, rendendola una versione più potente del BASIC ma con una sintassi più semplice. – RCProgramming

risposta

14

Questo non è un compito semplice. L'analisi del linguaggio e la teoria del compilatore sono argomenti piuttosto pesanti. Un sacco di matematica. Devi anche decidere quale piattaforma vuoi indirizzare, che determinerà anche se la tua lingua è completamente compilata (ad esempio C/C++, Pascal), compilata in bytecode (ad esempio Python, Java), o interpretata in runtime (ad esempio VBScript , JavaScript). Per specificare la lingua, sfiorare lo Backus-Naur format.

Per aiutarvi a lungo, ci sono diversi generatori robusto parser là fuori, tra cui:

  • Lex/Yacc (Flex/Bison sono le versioni GNU) - Il vecchio standard del settore scuola. Per lo sviluppo di un compilatore in C/C++
  • ANTLR - Se siete interessati a creare un compilatore Java utilizzando
  • Boost.Spirit - Un approccio diverso, consentendo specifiche del linguaggio C++ usando se stessa.

E molti altri. Un confronto può essere trovato here, mentre ancora un altro elenco può essere trovato here

Se siete veramente interessati alla teoria completa, si desidera controllare The Dragon Book.

Ma devo ribadire: questo è un grande argomento. Ci sono molti, molti strumenti per aiutarti lungo la strada, ma la tana del coniglio va piuttosto in profondità.

+3

Questo è un grande argomento, ma * non * coinvolge molto di (almeno ciò che la maggior parte della gente penserebbe di come) matematica. –

+0

Grazie mille per questa risposta approfondita. Ho alcune domande sulla tua risposta. Cosa significa parsing? In quale categoria verrebbe a cadere una lingua come il BASIC? – RCProgramming

+0

Alcune osservazioni: (1) No, non è matematica, ma comunque sono cose molto astratte, sì. (2) JavaScript non viene interpretato da sempre (la maggior parte delle implementazioni anche JIT compilano ora). Al giorno d'oggi, nessun linguaggio serio interpreta direttamente il codice sorgente o persino l'AST (le vecchie implementazioni di Ruby lo hanno fatto, le lingue con compettazione metaprogrammatica sono propense). (3) (E) BNF è utile sapere, ma i generatori di parser DSL usano o differiscono o sono completamente estranei, quindi non sono le cose più importanti. Senza contare che questa è solo la grammatica, devi ancora costruire un AST e farlo funzionare. – delnan

2

penso che il colpo di questo è:

  1. semplice da usare.
  2. Semplice da progettare/implementare.
  3. Forti capacità espressive.

Seleziona 1.9 di loro.

È possibile ottenere un ragionevole grado di due di questi. Ne fanno uno qualsiasi due è molto difficile e cercando di ottenere tutte e tre le foglie in una terra di nessuno dove non si fa bene.

p.s. Speek da experiance per # 1 + # 3

Problemi correlati