Domanda

Sto creando un gioco in XNA e stava pensando di creare il mio linguaggio di scripting (estremamente semplice sia chiaro). So che ci sono modi migliori per andare su questo (e che sto scoprendo l'acqua calda), ma voglio l'esperienza di apprendimento più che per essere produttivi e veloce.

Una volta confrontato con il codice in fase di esecuzione, da quanto ho capito, il solito approccio è quello di analizzare in un codice macchina o bytecode o qualcos'altro che è in realtà eseguibile e quindi eseguire che, giusto? Ma, per esempio, quando Chrome è uscito prima hanno detto che il loro motore JavaScript è stato veloce perché si compila il codice JavaScript in codice macchina. Ciò implica altri motori non sono state compilando in codice macchina.

Preferirei non la compilazione di un linguaggio più bassa, quindi non ci sono delle note tecniche moderne per l'analisi e l'esecuzione di codice senza la compilazione di basso livello? Forse qualcosa di simile analisi del codice in una sorta di albero, che si dirama attraverso l'albero, e confrontando ogni simbolo e chiamando una funzione che gestisce quel simbolo? (Wild indovinare e accoltellato nel buio)

È stato utile?

Soluzione

Io personalmente non rotolare il proprio parser (trasformando l'input in token) o lexer (verifica dei gettoni di input per la grammatica di lingua). Date un'occhiata a ANTLR per l'analisi / lexing - è un grande quadro e ha il codice sorgente completo, se si desidera scavare nelle viscere di esso.

Per eseguire il codice che avete analizzato, mi guardo l'esecuzione di un semplice macchina virtuale o meglio ancora un'occhiata alla LLVM , che è un open-source (ish) tentativo di standardizzare il formato di codice macchina di byte virtuale e fornire funzioni molto comode come JITing (trasformare il vostro codice di byte script compilato in assemblea).

Non ti scoraggiare dalle opzioni più avanzate che si macchina come ad esempio l'esecuzione di codice macchina nativo, ma tenere a mente che questa è una zona molto specialista e ottiene vero e proprio complesso, veloce reale!

Earlz ha sottolineato che la mia risposta potrebbe sembrare implicare 'non si preoccupano di fare da soli. Rileggendo il mio post lo fa sembrare un po 'in quel modo. La ragione per cui ho citato ANTLR e LLVM è che entrambi hanno un sacco di codice sorgente e tutorial così sento che questo è una fonte di riferimento buona. Prendere come base e giocare

Altri suggerimenti

Si può provare questo quadro di riferimento per la costruzione di lingue (funziona bene con XNA): http://www.meta-alternative.net/mbase.html

Ci sono alcuni tutorial: http://www.meta-alternative.net/calc.pdf

http://www.meta-alternative.net/pfront.pdf

Python è grande come un linguaggio di scripting. Vi consiglio di fare un C vincolante per le sue API C # e usare quella. Embedding Python è facile. L'applicazione può definire funzioni, i tipi / classi e variabili all'interno moduli che l'interprete Python può accedere. L'applicazione può anche richiamare le funzioni negli script Python e ottenere un risultato di nuovo. Queste due caratteristiche combinate ti dà un sistema di comunicazione a due vie.

In sostanza, si ottiene la sintassi e la semantica di Python per libero. Che cosa si avrebbe bisogno di implementare l'API è l'applicazione espone a Python. Un esempio potrebbe essere l'accesso al gioco funzioni logiche e le funzioni di rendering. script Python sarebbero quindi definire le funzioni che chiama questi, e l'applicazione host potrebbe invocare le funzioni Python (con parametri) per ottenere il lavoro fatto.

EDIT: Sembra che IronPython è possibile risparmiare ancora di più il lavoro. E 'un'implementazione C # di CPython, e ha il suo API incorporamento: http://www.ironpython.net/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top