Maus conselhos ao trabalhar com a ANTLR

Sua atenção é convidada a um conjunto de dicas prejudiciais que ajudarão você a criar o analisador mais eficiente. Não se esqueça de fazer tudo de acordo com as instruções, caso contrário, algo dará errado!

1. ATN - não um bug, mas um recurso


Terrence Par fez um ótimo recurso para otimizar a previsão de ramificação em sua gramática. Exclusivamente por se preocupar com o desempenho do seu analisador, o campo é estático e acumulará informações indefinidamente! Obviamente, você não notará muita diferença em arquivos pequenos; o principal é não analisar arquivos de 2 a 3 megabytes em seus testes, mesmo se não houver memória suficiente para outra pessoa!

2. Procure por quem não está acostumado a olhar para as explosões!


Se sua gramática verificar todos os tokens do fluxo em cada regra, você poderá garantir a precisão do processamento! Se não houver pilha suficiente, basta aumentar dez vezes o tamanho, o principal é criar mais regras!

3. SLL para fracotes


Por que a otimização se o ANTLR4 pode fazer isso por você? A gramática no modo TODO economiza um tempo valioso ao ler esses artigos. Lembre-se de adicionar os mesmos tokens a cada alternativa, especialmente se estiver bonita.

4. AST - todas as informações que você tem


Não se esqueça de ouvir Terrence e adicionar suporte a visitantes e ouvintes ao seu analisador. A incorporação de código em uma gramática não é apenas dificuldades desnecessárias, mas também um problema em potencial com a refatoração! Ignorando todos os nós da árvore, você pode não apenas tentar a sorte, mas também verificar os nervos do cliente!

5. Mais regras, deus das regras!


Mas você sabia que com a ajuda do ANTLR4 você pode construir uma torre de Babel? Nas seções de código com um aninhamento grande não pode ser encontrado? Uma função dentro de uma função com uma enorme quantidade de expressões? Apenas não mostre ao cliente o trabalho em arquivos js minificados, de qualquer maneira, ninguém os entende, nem mesmo navegadores.

6. O lexer é necessário apenas para criar tokens.


Sob nenhuma circunstância tente fazer algo com os tokens no lexer, empacotar o bloco {} no token não permitirá que você aproveite a visualização das máquinas do cliente que exigem mais memória!

A memória deve fluir! Que memleak esteja com você!

Source: https://habr.com/ru/post/undefined/


All Articles