Quais são as opções para escrever uma gramática de idiomas para um novo modo principal?

7

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-locks, é mais objetivo fornecer ferramentas de nível superior e não é algo que estou procurando.

fommil
fonte
11
Eu iria para o CEDET / Wisent, mas não fiz isso sozinho. Veja cedet.sourceforge.net/addlang.shtml
Stefan Kamphausen
O CEDET me pareceu razoavelmente insustentável, mas o analisador parecia legal.
fommil
11
Parece que pelo menos a parte do analisador do CEDET agora faz parte do Emacs. Veja gnu.org/software/emacs/manual/html_node/semantic/index.html#Top
Stefan Kamphausen
2
O CEDET faz parte do Emacs, mas isso não significa que seja mantido, consulte o Bug # 23792 .
npostavs
Agora, li o (s) manual (s) semântico / inteligente (s) de capa a capa e acho que não me ajuda a evitar escrever um mecanismo de bloqueio ou recuo de fonte. O lexer ainda depende de tabelas de sintaxe. Ele tem muitos recursos de alto nível em que não estou interessado (não acredito que eles funcionem ou sejam dimensionados satisfatoriamente para o meu idioma), mas parece haver uma lacuna no material de baixo nível. Estou esquecendo de algo? @StefanKamphausen
fommil

Respostas:

4

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 wisipacote disponível no GNU ELPA ( http: //elpa.gnu .org / packages / wisi.html ):

O pacote wisi fornece utilitários para o uso de analisadores LALR generalizados para fazer recuo, fonte e navegação. Veja o modo ada para um exemplo de seu uso.

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.

Stefan
fonte
isso parece legal, embora esteja muito ligado ada-modee 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.
fommil