Pergunta

Estou criando um jogo em XNA e estava pensando em criar minha própria linguagem de script (extremamente simples mente você). Eu sei que há maneiras melhores de fazer isso (e que eu estou reinventando a roda), mas eu quero a experiência de aprendizagem mais do que para ser produtivo e rápido.

Quando confrontado com código em tempo de execução, pelo que entendi, a abordagem usual é analisar em um código de máquina ou código de bytes ou outra coisa que é realmente executável e, em seguida, executar isso, certo? Mas, por exemplo, quando o Chrome saiu primeiro eles disseram que seu motor de JavaScript foi rápido porque ele compila o JavaScript em código de máquina. Isto implica outros motores não foram compilar em código de máquina.

Eu prefiro não compilar a uma linguagem menor, então existem técnicas modernas conhecidas para analisar e executar o código sem compilar para baixo nível? Talvez algo como analisar o código em algum tipo de árvore, ramificação através da árvore, e comparando cada símbolo e chamando alguma função que lida com esse símbolo? (Supondo selvagem e agudas no escuro)

Foi útil?

Solução

Eu, pessoalmente, não iria rolar o seu próprio analisador (girando a entrada em tokens) ou lexer (verificando os sinais de entrada para sua gramática idioma). Dê uma olhada na ANTLR para análise / léxico - é um grande quadro e tem código fonte completo se você quiser cavar a coragem dele.

Para executar o código que você já analisado, eu olhar para executar uma máquina virtual simples ou até melhor olhada llvm que é um open-source (ish) tentar padronizar o formato de código de máquina de byte virtual e fornecer características interessantes como JITing (transformando o seu código de byte roteiro compilado em conjunto).

Eu não desencorajá-lo a partir das opções mais avançadas que você máquina, como a execução de código de máquina nativo mas tenha em mente que esta é uma área muito especializada e fica realmente complexo, rápido real!

Earlz apontou que a minha resposta pode parecer implicar 'não se incomodam fazer isso sozinho. Re-lendo o meu post ele faz soar um pouco dessa forma. A razão que eu mencionei ANTLR e LLVM é que ambos têm montes de código-fonte e tutoriais assim que eu sinto que este é uma fonte de referência boa. Tomá-lo como uma base e jogo

Outras dicas

Você pode tentar este quadro para a construção de idiomas (que funciona bem com o XNA): http://www.meta-alternative.net/mbase.html

Existem alguns tutoriais: http://www.meta-alternative.net/calc.pdf

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

Python é grande como uma linguagem de script. Eu recomendo que você faça um C vinculativo para a sua API C # e usar isso. Embedding Python é fácil. Seu aplicativo pode definir funções, tipos / classes e variáveis ??dentro de módulos que o interpretador Python pode acessar. O aplicativo também pode chamar funções em scripts Python e obter uma volta resultado. Estas duas características combinadas dá-lhe um esquema de comunicação de duas vias.

Basicamente, você começa a sintaxe Python e semântica gratuitamente. O que seria necessário para implementar é a API sua aplicação expõe a Python. Um exemplo poderia ser o acesso a funções de lógica de jogo e tornar funções. scripts Python, então, definir funções que chama esses, e o aplicativo host iria invocar as funções do Python (com parâmetros) para começar o trabalho feito.

EDIT: Parece que IronPython pode poupar ainda mais trabalho. É um C # implementação de CPython, e tem sua própria incorporação API: http://www.ironpython.net/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top