Question

Je travaille sur une nouvelle langue et tout en écrivant la grammaire, je voudrais être en mesure de tester la grammaire pour l'exhaustivité, les conflits et similaire. Je ne suis pas vraiment préoccupé par le générateur de l'analyseur sous-incarnant (mais un pour .net serait préférable)

La liste des fonctionnalités en bref serait donc:

  • Fonctionnalité de construction d'éditeur de texte
  • Rapports d'erreur de syntaxe / sématique
  • Conflits Rapports
  • Fonctionnalité de test de grammaire (Fenêtre IE pour l'écriture de code dans la grammaire prévue pour vérifier l'exactitude de la définition de la grammaire)

Un projet CodePlex appelé Irony a quelque chose de simlar à ce que je demande mais ne prend pas en charge l'écriture de la grammaire comme BNF qui est nécessaire.

Était-ce utile?

La solution

je recommanderais Antlr en tant que générateur d'analyseur. Il est très complet complet et prend en charge C # ainsi qu'une multitude d'autres langues cibles.

Pour Ides, il y a un plugin pour Eclipse appelé Antlr ide et un IDE autonome appelé Antlrworks, qui fonctionnent bien.

Notez cependant que Antlr utilise un algorithme LL (*) au lieu d'un algorithme LR (K). Pourtant, c'est très agréable et Antlrworks peut faire la plupart des effectifs de gauche nécessaires.

Autres conseils

Lorsque vous «travaillez sur une nouvelle langue» et essayant d'obtenir une bonne référence BNF, vous ne voulez probablement pas biaiser votre grammaire de référence vers un générateur d'analyseur particulier. L'un des problèmes avec la rédaction d'une grammaire de test pour le bison (lalr (1)) ou antlr (ll *) est que vous faites exactement cela. Vous ne voulez pas non plus vous accrocher dans "Comment coder les règles BNF de telle sorte que le faire analyser" probablement parce que vous êtes intéressé à travailler sur la grammaire, à ne pas travailler sur le générateur d'analyseur.

Je recommanderais donc d'utiliser un générateur d'analyse gratuit en contexte complet. Cela vous permettra d'écrire la grammaire sous la forme la plus naturelle avec le moindre effort. Cela pourrait signifier abandonner "éditeur de texte", "fenêtre de test de l'éditeur", ... mais d'après mon expérience (vérifiez ma bio de débordement de pile) en utilisant un générateur d'analyseur gratuit en contexte submerge complètement ces subtilités. Edit-Save-parse ne prend tout simplement pas beaucoup d'efforts.

Je comprends que Bison a une option GLR qui fournirait une génération d'analyseurs sans contexte, et est open source, et il pourrait donc faire pour le test de la grammaire.

Notre Boîte à outils de réingénierie du logiciel DMS est commercial et fournit également un analyseur GLR, qui a été utilisé pour mettre en œuvre plus de 30 langauges complets, notamment C, C ++ et COBOL dans un certain nombre de dialectes ainsi que des langues plus modernes telles que Python, Ruby, PHP, ....

La différence entre le DMS et le bison est que DMS est conçu pour prendre en charge tous les aspects de la construction d'un analyseur / traducteur de langage complet (lexing Unicode, analyse GLR avec rapport d'erreur et récupération, construction automatique des arbres, construction de tableaux de symbole, contrôle et analyse du flux de données , transformations, jolie empreinte, ...). Si vous vouliez évaluer sérieusement votre "New Langauge", vous devrez éventuellement faire tout ça, et le bison n'est qu'un petit pas sur cette route. DMS vous transportera tout le long.

Peut-être que vous trouverez cet outil utile: Président de l'analyseur d'or

Malheureusement, il est Windows uniquement.

Jetez un œil à BNFC, qui peut générer du code de travail et le MakeFile, à partir de BNF Labled, pour un certain nombre de langues cibles comme: Haskell, OCAML, C, C ++ et Java. Vous obtenez une jolie imprimante, un vérificateur / imprimante de syntaxe abstrait, un code squelette pour votre propre compilateur ou interprète et la documentation de la langue Postcript.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top