Pergunta

Estou trabalhando em um novo idioma e, ao escrever a gramática, gostaria de poder testar a gramática quanto à integridade, conflitos e similares. Não estou realmente preocupado com o gerador de pastores subjacentes (mas um para .NET seria preferível)

Portanto, a lista de recursos em resumo seria:

  • Funcionalidade de construção do editor de texto
  • Relatórios de erro de sintaxe/semática
  • relatórios de conflitos
  • Funcionalidade de teste gramatical (ou seja, janela para escrever código na gramática pretendida para verificar a correção da definição da gramática)

Um projeto CodePlex chamado ironia tem algo Simlar para o que estou pedindo, mas não suporta escrever a gramática como BNF, necessária.

Foi útil?

Solução

eu recomendaria Antlr como um gerador de pastores. É um recurso muito completo e suporta C#, além de uma série de outros idiomas de destino.

Para Ides, há um plugin para eclipse chamado ANTLR IDE e um IDE independente chamado Antlrworks, ambos funcionam bem.

Observe, no entanto, que o ANTLR usa um algoritmo LL (*) em vez de um algoritmo LR (k). Ainda assim, é muito bom e a Antlrworks pode fazer a maior parte do fatoramento necessário.

Outras dicas

Ao "trabalhar em um novo idioma" e tentar acertar o BNF de referência, você provavelmente não deseja influenciar sua gramática de referência em relação a nenhum gerador de analisador em particular. Um dos problemas em escrever uma gramática de teste para bisonte (lalr (1)) ou antlr (ll*) é você faz exatamente isso. Você também não quer se apossar "Como faço para codificar as regras do BNF de forma a fazer isso realmente analisar", presumivelmente porque você está interessado em trabalhar na gramática, não trabalhando no gerador de analisador.

Então, eu recomendo o uso de um gerador de analisador gratuito de contexto completo. Isso permitirá que você escreva a gramática na forma mais natural com o menor esforço. Isso pode significar desistir do "Editor de texto", "Janela de teste do editor", ... mas na minha experiência (verifique minha biografia de estilismo de pilha) usando um gerador de analisador livre de contexto sobrecarrega essas getas completamente. Editar-Save-Parse simplesmente não exige muito esforço.

Entendo que o bisonte tem uma opção GLR que forneceria geração de analisador sem contexto e é de código aberto e, portanto, pode ser feito apenas para testar a gramática.

Nosso DMS Software Reengeneering Toolkit é comercial e também fornece um analisador GLR, que foi usado para implementar mais de 30 Langauges completos, incluindo C, C ++ e COBOL em vários dialetos, bem como idiomas mais modernos, como Python, Ruby, Php, ....

A diferença entre DMS e Bison é que o DMS foi projetado para apoiar todos os aspectos da construção de um analisador/tradutor de idiomas completo (Unicode Lexing, GLR analisando com relatórios e recuperação de erros, construção automática de árvores, construção de tabela de símbolos, controle e análise de fluxo de dados , transformações, bastante iminentes, ...). Se você quiser avaliar seriamente seu "novo Langauge", precisará fazer tudo isso, e o bisonte é apenas um pequeno passo ao longo desta estrada. O DMS o levará o tempo todo.

Pode ser que você achará essa ferramenta útil: Builder de analisador de ouro

Infelizmente, é apenas o Windows.

Dê uma olhada no BNFC, que pode gerar código de trabalho e o Makefile, da Labled BNF, para vários idiomas de destino, como: Haskell, OCAML, C, C ++ e Java. Você obtém uma impressora bonita, verificador/impressora abstrato, código de esqueleto para seu próprio compilador ou intérprete e documentação de idioma pós -descrito.

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