Question

Je crée un jeu XNA et a été pensée de créer mon propre langage de script (esprit extrêmement simple vous). Je sais qu'il ya de meilleures façons d'aller à ce sujet (et que je réinvente la roue), mais je veux l'expérience d'apprentissage plus que d'être productif et rapide.

Face à code au moment de l'exécution, ce que je comprends, l'approche habituelle consiste à analyser en un code machine ou un code d'octet ou quelque chose d'autre qui est en fait exécutable, puis exécuter, non? Mais, par exemple, lorsque Chrome est sorti d'abord ils ont dit leur moteur JavaScript a été rapide car il compile le code JavaScript dans le code de la machine. Cela implique d'autres moteurs ne sont pas compilent en code machine.

Je préfère ne pas compiler à une langue inférieure, donc ce qu'il ya des techniques modernes pour l'analyse et l'exécution de code connu sans compiler à un niveau bas? Peut-être quelque chose comme l'analyse syntaxique du code dans une sorte d'arbre, de branchement à travers l'arbre, et en comparant chaque symbole et en appelant une fonction qui gère ce symbole? (Deviner sauvage et coups de couteau dans l'obscurité)

Était-ce utile?

La solution

Personnellement, je ne roule pas votre propre analyseur (transformer l'entrée en jetons) ou lexer (vérification des jetons d'entrée pour votre grammaire de la langue). Jetez un oeil à ANTLR pour l'analyse syntaxique / lexing - c'est un grand cadre et a le code source complet si vous voulez creuser dans les entrailles de celui-ci.

Pour l'exécution de code que vous avez analysé, je regarde la gestion d'une machine virtuelle simple, ou encore mieux regarder LLVM qui est un open-source (ish) tentent de normaliser le format de code octet de machine virtuelle et fournir des fonctionnalités intéressantes comme Jiting (tourner votre code d'octet compilé de script dans l'assemblage).

Je ne vous décourager des options plus avancées que votre machine tel que le code machine natif exécution, mais gardez à l'esprit que c'est un domaine très spécialisé et se complexe réel, très vite!

Earlz a fait remarquer que ma réponse pourrait sembler impliquer « ne se préoccupe pas de faire vous-même. Relisant mon post il ne semble un peu de cette façon. La raison pour laquelle je l'ai mentionné ANTLR et LLVM est qu'ils ont tous deux tas de code source et des didacticiels, donc je pense que c'est une bonne source de référence. Prenez-le comme base et jouer

Autres conseils

Vous pouvez essayer ce cadre pour les langues du bâtiment (il fonctionne bien avec XNA): http://www.meta-alternative.net/mbase.html

Il y a quelques tutoriels: http://www.meta-alternative.net/calc.pdf

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

Python est grand comme un langage de script. Je vous recommande de faire un C # obligatoire pour son API C et l'utiliser. Embedding Python est facile. Votre application peut définir des fonctions, types / classes et les variables à l'intérieur des modules qui l'interpréteur Python peut accéder. L'application peut également appeler des fonctions dans les scripts Python et obtenir un résultat en arrière. Ces deux caractéristiques combinées vous donne un système de communication dans les deux sens.

En fait, vous obtenez la syntaxe Python et sémantique gratuitement. Ce que vous devez mettre en œuvre l'API est votre application expose à Python. Un exemple pourrait être l'accès au jeu des fonctions logiques et rendre les fonctions. Les scripts Python seraient alors définir des fonctions qui appelle ceux-ci, et l'application hôte invoquerait les fonctions Python (avec les paramètres) pour faire le travail.

EDIT: On dirait que IronPython peut vous faire économiser encore plus de travail. Il est une application C # de CPython, et a sa propre API d'intégration: http://www.ironpython.net/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top