MAGES é o sucessor oficial do YAMP. É um analisador e interpretador de expressões muito simples, mas poderoso. Você pode usar MAGES para incluir um mecanismo de script leve, sofisticado e fácil de personalizar em seu aplicativo.
Entre outras aplicações, MAGES tem sido usado nos PowerToys da Microsoft.
MAGES acabou de ser atualizado (v3.0.0) com metadados de objetos, suporte direto a listas e sintaxe JSX.
2023 :
MAGES foi atualizado (v2.0.0) com suporte para números complexos. Além disso, o destino de construção e o tempo de execução foram atualizados para fazer uso das possibilidades modernas.
2018 :
A primeira versão estável foi lançada. A versão atual 1.6.0 contém um REPL aprimorado. A biblioteca contém tudo para realizar operações leves de script em C#. Um artigo do CodeProject sobre a biblioteca (também contendo algumas comparações de histórico e desempenho) também está disponível.
O próprio MAGES não possui dependências, porém os testes dependem do NUnit e os benchmarks utilizam BenchmarkDotNet. Normalmente, MAGES deve ser instalado por meio da fonte do pacote NuGet. Se isso não funcionar para você, clone o código-fonte e construa MAGES você mesmo. Certifique-se de que todos os testes de unidade sejam aprovados.
Toda a biblioteca foi projetada para ser consumida em aplicativos .NET Core 3.0 (ou superior)/.NET 5.0 (ou superior). Isso significa que é (entre outros) compatível com Unity 2021.2 ou Mono 6.4. O pacote NuGet está disponível no feed de pacotes oficial.
No caso mais simples você está criando um novo mecanismo para manter um escopo global (para variáveis e funções) e iniciar a interpretação.
var engine = new Mages . Core . Engine ( ) ;
var result = engine . Interpret ( " sin(2) * cos(pi / 4) " ) ; // 0.642970376623918
Você também pode seguir em frente e criar blocos reutilizáveis a partir de snippets.
var expOne = engine . Compile ( " exp(1) " ) ;
var result = expOne ( ) ; // 2.71828182845905
Ou você pode interagir com elementos criados por MAGES.
var func = engine . Interpret ( " (x, y) => x * y + 3 * sqrt(x) " ) as Mages . Core . Function ;
var result = func . Invoke ( new Object [ ] { 4.0 , 3.0 } ) ; // 18.0
Ou ainda mais simples (os detalhes são explicados no documento de introdução):
var func = engine . Interpret ( " (x, y) => x * y + 3 * sqrt(x) " ) as Mages . Core . Function ;
var result = func . Call ( 4 , 3 ) ; // 18.0
Estes são apenas alguns dos exemplos mais básicos. Mais informações podem ser encontradas na documentação.
A documentação é fornecida na forma de documentos Markdown colocados na pasta doc deste repositório. Vale a pena conferir os seguintes links:
Se algo estiver faltando, não estiver claro ou estiver errado, envie um PR ou registre um problema. Consulte a seção a seguir sobre contribuições para obter mais informações.
Contribuições na forma de implementações de recursos ou correções de bugs são muito bem-vindas, mas precisam ser realizadas de forma organizada e consistente. As diretrizes de contribuição devem ser lidas antes de iniciar qualquer trabalho.
As contribuições também podem ser recebidas na forma de relatórios de bugs e solicitações de recursos. Viva o desenvolvimento de código aberto!
As regras do semver são o nosso pão com manteiga. Em resumo, isso significa:
Portanto: não espere nenhuma alteração significativa na mesma versão principal.
As seguintes empresas patrocinaram parte do desenvolvimento do MAGES.
Obrigado por todo apoio e confiança no projeto!
A Licença MIT (MIT)
Copyright (c) 2016-2024 Florian Rappl
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software"), para negociar o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar , publicar, distribuir, sublicenciar e/ou vender cópias do Software e permitir que as pessoas a quem o Software seja fornecido o façam, sujeito às seguintes condições:
O aviso de direitos autorais acima e este aviso de permissão serão incluídos em todas as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM HIPÓTESE ALGUMA OS AUTORES OU DETENTORES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.