Pergunta

Eu estou procurando um gerador de analisador para Java que faz o seguinte:. Meu projeto linguagem é bem simples e contém apenas um pequeno conjunto de símbolos

Saída em código legível Java puro para que eu possa modificá-lo (por isso que eu não iria usar ANTLR) biblioteca madura, que será executado e trabalhar com pelo menos Java 1.4

Eu olhei para o seguinte e eles podem funcionar:? JavaCC, jlex, Ragel

Foi útil?

Solução

Você deve usar Rats ... Dessa forma, você não tem que lexer separada e analisador e, em seguida, se você deseja estender seu projeto que será trivial. É em java e então você pode processar seu AST em Java ...

Outras dicas

Talvez você está procurando analisador combinators em vez de analisador geradores ? Consulte este papel e JParsec

É uma péssima idéia para editar código do analisador gerado - é muito mais fácil de editar o arquivo de gramática e, em seguida, recompilar-lo. A menos que você está fazendo isso para fins educacionais, caso em que se orgulha ANTLR na geração de código muito legível para tal um gerador de analisador poderoso.

Eu tive uma boa experiência SableCC .

Ele funciona diferente da maioria dos geradores, em que você está determinado a AST / modelo visitante que você estender (através de herança).

Não consigo comentário sobre a "qualidade" do seu código em termos de legibilidade (ele tem sido um tempo desde que eu usei), mas ele tem a qualidade que você não tem que ler o código de tudo. Apenas o código em sua subclasse.

ANTLR vai fazer isso por você. É um gerador de analisador agradável com uma multa livro disponível para documentação.

Dê uma olhada SableCC . Sablecc é um fácil de usar gerador de interpretador que aceita a gramática do idioma como EBNF, sem entrelaçamento código de ação, e gera um analisador Java que produz uma árvore de sintaxe que pode ser atravessado utilizando um visitante nó da árvore. SableCC é poderoso, mas muito mais simples de usar do que ANTLR, JavaCC, yacc, etc. Ele também não exige um lexer separado. Construir o seu processador de linguagem equivale a estender uma classe visitante gerada a partir de sua gramática, e substituir seus métodos que são chamados quando uma construção sintática é encontrada pelo analisador. Para cada XYZ regra gramatical, o visitante terá um método inAXYZ (Node xyz) .... outAXYZ (xyz Node) chamado quando o analisador corresponde a regra.

Para uma linguagem tão simples, JFlex pode ser suficiente. É semelhante a JLex mas mais rápido (que também pode significar menos legível, mas eu não vi saída de JLex).

É um lexer, não um parser, mas é construído a interface facilmente com CUP ou byacc / J . E, novamente, para uma linguagem simples, pode ser mais fácil simplesmente escrever seu próprio analisador (Eu tenho feito isso antes).

Estamos usando JavaCC para o nosso (como linguagem bem bastante pequena) e estão felizes com ele.

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