Pergunta

Eu tenho um projeto onde um usuário precisa definir um conjunto de instruções para uma interface que é completamente escrito em javascript. Eu preciso ter a capacidade de analisar uma seqüência de instruções e, em seguida, traduzi-los em instruções. Existe alguma bibliotecas lá fora para análise que são 100% javascript? Ou um gerador que irá gerar em javascript? Obrigado!

Foi útil?

Solução

Algo como http://jscc.phorward-software.com/ , talvez?

JS / CC é o primeiro sistema de desenvolvimento analisador disponível para JavaScript e ECMAScript -derivates. Ele foi desenvolvido, ambos, com a intenção de construir um sistema de desenvolvimento do compilador produtiva e com a intenção de criar um ambiente acadêmico easy-to-use para pessoas interessadas em como análise de geração de tabela é feita, em geral, bottom-up análise.

Os sindicatos de software independentes de plataforma ambos: A-base expressão regular lexical analisador gerador correspondência fichas individuais do fluxo de caracteres de entrada e a LALR (1) parser gerador , calculando as tabelas de análise para um determinado gramática livre de contexto e construir um sozinho stand- , analisador de trabalho. A gramática livre de contexto alimentado para JS / CC é definido em um Backus-Naur-Form metalinguagem baseado, e permite a inserção de código semântico indivíduo a ser avaliados na redução de uma regra.

si JS / CC foi inteiramente escrito em ECMAScript para que possa ser executado em muitas maneiras diferentes: como independente de plataforma, navegador baseado JavaScript embutido em um site, como um aplicativo do Windows Script Host , como um compilado JScript.NET executável, como Mozilla / Rhino ou Mozilla / Spidermonkey interpretado aplicativo ou um script shell V8 no Windows, * nix, Linux e Mac OSX. No entanto, para a execução produtiva, recomenda-se usar as versões de linha de comando. Estas versões são capazes de montar um compilador completo a partir de uma especificação analisador JS / CC, que é então armazenado a uma .js arquivo de origem JavaScript.

Outras dicas

Se você quer construir analisadores JavaScript e geradores de código, confira a implementação MetaII em Javascript.

A MetaII Compiler tutorial percorre a construção de um sistema de compilador completamente auto-suficiente que pode traduzir-se e outras linguagens:

MetaII Compiler Tutorial

Isso tudo é baseado em uma incrível little de 10 páginas de papel técnico por Val Schorre: META II: A Syntax-Oriented Compiler escrita Língua de 1964. compilador O MetaII completa auto-descrição honesto-a-deus é de cerca de 30 linhas! Eu aprendi como compiladores de compilação deste em 1970. Há um momento alucinante quando você finalmente Grok como o compilador pode se regenerar ....

O tutorial explica MetaII, como ele funciona, e implementa MetaII compilação MetaII em JavaScript. Você pode facilmente modificar este compilador para analisar outros langauges, e produzir diferentes Javascript.

Eu sei o site autor de meus tempos de faculdade, mas não tem nada a ver com o site.

Jison é provavelmente o melhor e mais ativa lexer e analisador gerador lá fora para Javascript. Ele imita Bison e Yacc.

Jison: http://zaach.github.io/jison/

Se você quer apenas um peso lexer luz (~ 100 sloc) você pode dar uma olhada em Lexed.js: https: // github.com/tantaman/lexed.js

Para tarefas de análise simples estou muito gostam de usar uma variante da Pratt Top Down Operador Precedência analisador . Enquanto Pratt escreveu o artigo original usando um velho dialeto Lisp, os mesmos conceitos podem ser facilmente usados ??em quase todas as línguas. Na verdade, Douglas Crockford escreveu um excelente artigo sobre Top Down Operador Precedência analisar em JavaScript , que pode ser apenas o que você precisa.

Aqui está um exemplo de um analisador para uma "pseudo" linguagem natural de instruções, que foi implementado em pura JavaScript com chevrotain Análise DSL :

https://github.com/SAP/ chevrotain / blob / mestre / exemplos / analisador de / herança / inheritance.js

Este exemplo ainda inclui suporte para múltipla línguas naturais (Inglês e Alemão) usando herança gramática.

chevrotain se enquadra na categoria de "bibliotecas lá fora para análise que são 100% javascript" como ele executa nenhuma geração de código . Usando chevrotain é semelhante a "mão elaborar" um analisador decente recursiva, única sem a maior parte do dor de cabeça , tais como:

  • criação da função Lookahead (decidir qual alternativa para tomar)
  • Automática Erro de recuperação.
  • Esquerda recursão detecção
  • Detecção Ambiguidade.
  • As informações de posição.
  • ...

como alças chevrotain que automaticamente.

Dependendo do projeto do "conjunto de instruções, você pode ser capaz de usar o Javascript embutido função eval, que analisa fonte Javascript; você pode ser capaz de escrever um tradutor simples para converter as instruções para código Javascript.

A propósito, ter muito cuidado com buracos XSS.

Se você está realmente procurando apenas um lexer, tente embelezar .

Se você quiser um lexer e nada mais que um lexer então dê uma olhada nisso: https://github.com / aaditmshah / lexer

É um lexer JavaScript puro com muitas características poderosas escritas em apenas algumas linhas de código.

Eu estava procurando por algo semelhante que não teria qualquer brecha de segurança e me deparei com dois recursos. Eles não analisar o script, mas realmente executá-lo em um ambiente "seguro" - algo que você não pode garantir ao usar a função eval. Então, eu não sei se é exatamente o que você está procurando, mas dê uma olhada:

  1. jsandbox - Javascript sandbox
  2. Google Caja -. Iframe virtual
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top