Estou escrevendo um modo principal para uma linguagem de programação que possui uma gramática bem definida: ela possui um BNF, formalizado em alguns arquivos felizes .
Não quero particularmente reimplementar o BNF como uma série de varreduras regex para frente / trás (como muitos modos principais o fazem), embora eu não me oponha a traduzi-lo manual ou automaticamente.
Estou ciente do SMIE , existem outras opções disponíveis no Emacs lisp que me permitam definir a gramática do idioma e gerar o máximo possível automaticamente, por exemplo, rostos, comandos sexp, população imenu.
Preocupo-me principalmente com a simplicidade e a correção do modo, e não com o desempenho bruto, mas certamente gostaria de ter uma ideia aproximada do que são as compensações (obviamente, se o desempenho for muito baixo, seria inutilizável e portanto, não é apropriado usar).
Isso está um pouco relacionado ao modo de escrever um modo principal, embora mais avançado, pois já estou ciente de tudo em "Modos principais" no manual Emacs Lisp.
ATUALIZAÇÃO : Estudei e conversei com o autor da Semantic e não é capaz de gerar os font-lock
s, é mais objetivo fornecer ferramentas de nível superior e não é algo que estou procurando.
fonte
Respostas:
Além do pacote SMIE (que de fato pode usar uma gramática BNF, mas geralmente não funciona bem com uma gramática BNF projetada para o analisador de estilo LALR usual), existe o
wisi
pacote disponível no GNU ELPA ( http: //elpa.gnu .org / packages / wisi.html ):Não tenho experiência com ele e não conheço outro pacote que não seja o modo ada, mas o modo ada é bastante funcional, portanto vale a pena dar uma olhada. Também espero que o autor fique feliz em ajudá-lo a usá-lo.
fonte
ada-mode
e não tenho certeza de como é generalizável. Uma preocupação que gostaria de expressar é que o analisador subjacente, inteligente, da Semântica, geralmente faz a análise completa de arquivos em vez de localizada, e não é particularmente robusto para erros de sintaxe, portanto, pode introduzir uma enorme regressão de desempenho. Eu acho que alguém precisaria de uma prova de conceito para ver, pois não há respostas definidas.Acabei de criar um modo principal do GNU Emacs para editar gramáticas BNF .
Atualmente, fornece sintaxe básica e bloqueio de fonte para arquivos BNF. EBNF e ABNF estão nos meus planos para o futuro próximo.
fonte