Qual é o melhor gerador de analisador LALR para C ++ que pode gerar mensagens de erro significativas

StackOverflow https://stackoverflow.com/questions/1858297

  •  13-09-2019
  •  | 
  •  

Pergunta

Estou procurando a melhor solução para um gerador de analisador LALR para C ++ que me permitirá gerar mensagens de erro realmente boas. Eu realmente odeio os erros de sintaxe que o MySQL gera e quero levar o analisador nele e substituí -lo por um verificador de "fiapos" que me dirá mais do que apenas

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a from users' at line 1

Eu usei YACC/LEX e BISON/FLEX. Tem que trabalhar no Mac ou Linux.

Foi útil?

Solução

Por que você precisa de Lalr? Um dos benefícios dos analisadores LL (K) é que eles geralmente podem facilitar a geração de mensagens de erro claras. A maioria das gramáticas que podem ser analisadas por um analisador LALR pode ser facilmente refatorada para ser parsável por um analisador LL (K).

Antlr é um gerador de analisador LL (k) popular que pode gerar C ++ (além de vários outros idiomas). A partir de Capítulo 10 da referência definitiva de ANTLR:

A qualidade das mensagens de erro de um aplicativo de idioma e a estratégia de recuperação geralmente faz a diferença entre um aplicativo profissional e um aplicativo amador. A recuperação de erros é o processo de recuperação de um erro de sintaxe, alterando o fluxo de entrada ou consumindo símbolos até que o analisador possa reiniciar em um estado conhecido. Muitos reconhecedores construídos à mão e muitos não baseados em LL emitam mensagens de erro menos do que ótimas, enquanto os reconhecedores gerados pela ANTLR emitem automaticamente mensagens de erro muito boas e se recuperam de forma inteligente, conforme mostrado neste capítulo.

Muitos As gramáticas também estão disponíveis para ANTLR, Incluindo uma gramática MySQL.

Outras dicas

Se você achar que o ANTLR não resolve completamente seu problema, você pode considerar manjericão. É um gerador de analisador LR (1) que foi projetado e escrito para criar um analisador C ++.

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