Funzionalità di base per una lingua di base? Suggerimenti DSL?

9

Ho finalmente iniziato a capire la complessità dietro la creazione di un interprete e un compilatore. Ho costruito diverse versioni di TinyBasic, 1964 (Dartmouth) Basic e le mie espansioni su quelle lingue prima di arrivare a questo punto. Il progetto più recente è quello che chiamo Open Source Basic ... perché non ho potuto pensare ad altre caratteristiche del linguaggio che interesserebbero le persone. Essere in grado di aprire la fonte della lingua e capire come sono fatte alcune cose complesse (come vengono eseguite la scansione, l'analisi, l'interpretazione e la compilazione)

Open Source Basic viene prima interpretato in un linguaggio basato sullo stack. Quel linguaggio basato su stack viene quindi interpretato ed eseguito immediatamente o trasformato in un eseguibile CLR.

Le mie domande si riducono a questo:

  • Quali sono le caratteristiche / costrutti di base di un linguaggio di base? Ho già questi costrutti di base: Assegnazioni, Espressioni, Variabili, alcune funzioni (Casuale, ToUpper, ToLower), Looping (per e do- while / until), If (block e single-line) decisioni Else, input basato su console (Input) e output (Print) e sub-routine (senza parametri ancora).
  • Quando ho terminato di aggiungere i costrutti di base nella mia lingua, come dovrei espandermi? In quale dominio? In altre parole, in che direzione deve seguire il mio linguaggio di base open source quando ho tutti i costrutti generici che funzionano?

Grazie per il tuo tempo,

Dominick

    
posta Dominick 13.06.2011 - 15:36
fonte

5 risposte

1

La mia esperienza con i primi BASIC sul Commodore [Vic-20, C-64] mi ha dato l'impressione che i numeri di linea fossero una "caratteristica" fondamentale di BASIC. Sembra che non siano più utilizzati nelle implementazioni moderne, il che per me è una sorta di danno dato che la mia visione primaria di BASIC è come un linguaggio di apprendimento da cui trampolino di lancio su qualcos'altro.

    
risposta data 02.08.2011 - 19:27
fonte
1

Sicuramente uno sforzo nobile, ma penso che hai invertito le tue priorità.

La tua prima preoccupazione dovrebbe essere il problema del "dominio" a cui la tua lingua è indirizzata. Ecco perché è chiamato in primo luogo "linguaggio specifico per il dominio". Un DSL è tollerabile solo quando è piccolo, semplice e molto strettamente focalizzato a risolvere una serie particolare di problemi come un coltello nel burro.

Dopo aver identificato il dominio e come funzionerà la tua lingua nel dominio, puoi definire specifici costrutti o funzioni.

Infine, potrebbe essere utile considerare se desideri un DSL interno o esterno .

    
risposta data 01.09.2011 - 05:05
fonte
0

Ho sviluppato un linguaggio di scripting per un'applicazione CAE / FEA e alcune funzionalità che ho trovato utili per gli utenti finali sono: Variabili locali e globali Matrici con allocazione dinamica ed espansione Funziona con argomenti e per passaggio di riferimento Strutture (tipi definiti dall'utente) Insieme alle caratteristiche che hai menzionato, dovresti iniziare con un linguaggio piuttosto potente. Quindi svilupperai in base alla richiesta dell'utente.

    
risposta data 13.06.2011 - 16:23
fonte
0

Ci sono diverse funzionalità che possono essere aggiunte o estese se già esistono, ma ...

... I linguaggi di programmazione di base, sono molto simili ai linguaggi di script e una funzionalità che molti hanno mancato o incluso successivamente, era spazio dei nomi o moduli.

C, C ++, PHP, Visual Basic, avviato senza moduli / spazi dei nomi e dove aggiunto in seguito.

Il prossimo potrebbe essere subroutine (procedure o funzioni che non restituiscono un valore) e funzioni (subroutine che restituiscono un valore speciale).

    
risposta data 15.06.2011 - 23:26
fonte
0

understand how some complex things are done (how scanning, parsing, interpreting, and compiling are done)

C'è una bella domanda sullo Stack Sito di overflow sulle risorse per la comprensione dei compilatori. Puoi anche dare un'occhiata alla mia pagina della classe Compilers .

When I'm 'done' adding the basic constructs onto my language - how should I branch out?

Viste le funzionalità che hai già creato, ti suggerisco di aggiungere tre tipi di dati: int, string, boolean. Dovrai fare tre cose, ognuna un po 'più difficile del precedente:

  1. Modifica la grammatica in modo da poter analizzare quelle parole chiave. Test.
  2. Crea (o aggiungi alla tabella dei simboli esistente) in modo che tu possa includere il tipo di dati insieme al nome della variabile e altre proprietà. Quindi fai un interruttore di debug in modo da poter testare questo e vedere la tabella dei simboli.
  3. Verifica i tipi compatibili prima della generazione del codice a MsIL o durante l'interpretazione. Prova entrambi i casi di errore e non errore in ciascuna modalità di esecuzione per tutti i tipi.

Se ciò va bene, suggerisco di lavorare sull'ambito (locale nelle sub-routine e globale). Fammi sapere se desideri qualche consiglio su questo.

Buona fortuna. E divertiti!

    
risposta data 28.07.2011 - 16:00
fonte

Leggi altre domande sui tag