Nitra devient Open Source !  |  Blogue de l’entreprise

Nitra devient Open Source ! | Blogue de l’entreprise

Nouveaux produits
Nouvelles

Nous avons été plutôt silencieux à propos de Nitra depuis notre article de blog d’introduction, en novembre de l’année dernière. Mais nous ne sommes pas restés assis. Nous avons été occupés à construire les fondations d’un projet que nous souhaitons voir comme la base de nombreux travaux futurs ici chez JetBrains. Maintenant que nous estimons avoir atteint un ensemble de fonctionnalités viables minimum, ainsi qu’une bonne base architecturale pour le développement futur, nous sommes très heureux de franchir les prochaines étapes de notre feuille de route et de publier Nitra en tant que projet Open Source.

La provenance est actuellement disponible sur GitHubpublié sous le Licence BSD simplifiée.

Qu’est-ce que Nitra ?

Pour rappel, Nitra est un framework pour la prochaine génération d’outils linguistiques.

Traditionnellement, les langages ne sont livrés avec aucun type de support IDE. Il appartient aux fournisseurs d’outils de fournir la coloration syntaxique, la description, la complétion de code, la navigation, la recherche d’utilisations, les refactorisations, etc. Certaines de ces fonctionnalités, telles que la coloration syntaxique et la description, peuvent être grossièrement implémentées d’une manière similaire aux expressions régulières, mais les fonctionnalités les plus puissantes nécessitent une compréhension plus approfondie du langage.

Idéalement, un service linguistique devrait être capable d’analyser un fichier sous une forme sur laquelle il peut raisonner – un arbre de syntaxe abstraite (AST). Avec une connaissance aussi approfondie du langage sous-jacent, il sait quels nœuds de l’arborescence sont des mots-clés pour la coloration syntaxique, sait où les blocs commencent et se terminent pour le contour, peut extraire les identifiants et leurs utilisations pour la complétion de code et la navigation. La manipulation de l’arborescence peut reformater ou même réécrire le code source, permettant des refactorisations.

C’est ce que fait JetBrains en ce moment, et, en tant qu’entreprise, nous sommes très bons dans ce domaine – ReSharper est livré avec des analyseurs et des AST pour environ 20 formats de fichiers, et l’écosystème IntelliJ en prend en charge bien d’autres. Comme l’a dit un chef de produit : « Nous sommes JetBrains. Nous écrivons des parseurs pour le petit-déjeuner ». Mais c’est travail occupé.

Nitra est conçu pour supprimer ce travail fastidieux, nous permettant de prendre en charge plus de langues, plus rapidement, et de nous concentrer sur les niveaux supérieurs de la pile d’outils linguistiques, tels que les analyses et les solutions rapides.

Nitra est un langage pour décrire les grammaires et les arbres syntaxiques abstraits pour les représenter. C’est également un outil de construction pour compiler les grammaires dans des analyseurs et générer les classes nécessaires pour représenter et naviguer dans l’AST. Et c’est aussi un ensemble de services linguistiques qui utilisent la grammaire pour fournir une coloration syntaxique automatique, un contour et une mise en correspondance des accolades.

De plus, les grammaires de Nitra sont conçues pour être extensibles et réutilisables. Un exemple simple serait les grammaires de blocs de construction de base fournies avec Nitra, telles que Espaces blancs et CStyleCommentaires. Les deux sont clairement utiles dans de nombreuses langues et peuvent être simplement inclus et réutilisés dans une grammaire plus large.

Un meilleur exemple serait HTML, qui permet des « îlots » intégrés de JavaScript et CSS. La grammaire HTML pourrait inclure les grammaires JavaScript et CSS et permettre l’analyse complète d’un fichier HTML typique. Allez plus loin et regardez Moteur de création de modèles Web Razor de .net. Il s’agit d’un fichier HTML côté serveur qui inclut non seulement JavaScript et CSS, mais également C#. Construisez une grammaire qui inclut HTML, JS, CSS et C#, et vous avez un analyseur et un AST qui peuvent gérer les fichiers Razor.

Lis Introduction de Hadi au post de Nitra pour voir un exemple de grammaire, et consultez le wiki pour Documentationnotamment pour la syntaxe des grammaires.

Statut actuel

Bien que nous créions Nitra Open Source aujourd’hui, cela ne doit pas être considéré comme un aperçu de l’utilisateur final. C’est une boîte à outils de langage de bas niveau, et si vous voulez l’utiliser, attendez-vous à vous salir les mains. Voici ce qu’il prend actuellement en charge :

  1. Grammaires pour définir des analyseurs sans lexer et des AST qui peuvent être étendus au moment de la compilation ou de l’exécution, prenant en charge la composition des langages ou des langages avec une syntaxe extensible, tels que Nemerle
  2. UN outil en ligne de commande pour compiler des grammaires dans un assembly contenant l’analyseur et les classes AST (les grammaires peuvent également être compilées dans Visual Studio)
  3. UN Application Windows charger et tester des grammaires
  4. UN Service de langage Visual Studio qui utilise Nitra pour analyser les fichiers et fournir une coloration syntaxique automatique, un contour et une correspondance entre accolades. Le travail en cours consiste à augmenter la prise en charge automatique ici pour inclure les déclarations aller, trouver les utilisations et renommer les refactorisations

Mais c’est encore un travail en cours. Il y a des choses qui ne fonctionnent pas encore. La source reflète cela par endroits, avec des grammaires incomplètes (par exemple, C++) et certaines références à des outils de test internes et des emplacements de fichiers qui ne sont pas inclus dans le code source. Cela reflète simplement le statut du code en tant que projet actif et sera nettoyé au fil du temps.

Bâtiment Nitra

Avant de pouvoir utiliser Nitra, vous devez le construire. Instructions complètes pour bâtiment Nitra peut être trouvé ici. Voici un aperçu :

  1. Installez Nemerle. Nitra est construit par l’équipe Nemerle, à Nemerle, nécessite donc Nemerle pour compiler. Tu peux télécharger la dernière version depuis le site de Nemerle (il n’y a actuellement pas de version VS2013 qui prend en charge Nitra. Une sera bientôt disponible. En attendant, vous devez utiliser VS2012)
  2. Une fois installé, vous devez ouvrir une invite de commande dans le dossier Nitra et exécuter “BuildBoot.cmd”. Cela démarre le processus de génération, en créant les versions de démarrage des assemblages requis par le produit principal pour la génération. vous n’avez besoin de le faire qu’une seule fois.
  3. Générer la solution Nitra.sln dans Visual Studio
  4. Définissez l’environnement “NitraPath” pour qu’il pointe vers la racine de la distribution source. L’intégration Visual Studio l’utilise pour localiser le fichier “NitraGlobalConfig.xml” qui lui indique quelles grammaires charger

Utiliser Nitra

La solution contient plusieurs applications de test que vous pouvez utiliser pour essayer Nitra.

Tout d’abord, il y a Nitra.Visualizer, qui est une application Windows préconfigurée pour charger des fichiers de test à partir du dossier Nitra\Tests\Visualizer. Il utilisera les grammaires définies dans la solution Nitra pour charger les fichiers de test et comparer la sortie avec un fichier “gold” connu. Si la sortie est différente, le test échoue et vous pouvez voir les différences dans l’onglet “Diff”. Si le test réussit, le fichier s’affiche dans le volet de droite, avec la coloration syntaxique et le contour appliqués. Vous pouvez également naviguer dans l’AST sous l’onglet “Réflexion” et voir comment Nitra le produira dans une version joliment imprimée.

Nitra.Visualiser affichant un fichier C#

Il existe plusieurs tests et langages différents pris en charge ici, y compris C # et JSON, ainsi qu’une calculatrice DSL.

En fait, il existe également un autre exemple d’application qui utilise directement la calculatrice DSL – Sample.Calc.App. Il s’agit d’une application console écrite en Nemerle qui fait référence à la grammaire de la calculatrice et analyse les entrées de la ligne de commande. Il imprime ensuite joliment l’expression que vous entrez, la sort avec la coloration syntaxique et l’évalue à l’aide d’une méthode Value() définie dans le cadre de la grammaire.

Exemple d'application de calculatrice

Et bien sûr, il y a l’intégration de Visual Studio. Une fois ce projet construit, vous obtiendrez un fichier Nitra.VisualStudio.vsix dans le dossier bin\Debug. Double-cliquer dessus l’installera dans Visual Studio (vous pouvez également configurer la ligne de commande de débogage vous pouvez donc simplement F5 le projet). N’oubliez pas de définir la variable d’environnement “NitraPath” comme mentionné ci-dessus. L’extension ajoute la prise en charge des fichiers *.json et analysera les fichiers *.csn en tant que C #, mais le plus utilement, elle analysera, mettra en évidence la syntaxe et ajoutera un contour et une correspondance entre accolades pour les fichiers de grammaire *.nitra.

vs_extension

Il existe d’autres exemples de projets dans la solution, et vous pouvez également exécuter la suite de tests avec le fichier batch « run.cmd » dans le dossier Nitra\Tests.

Pourquoi l’Open Source ?

Le plan a toujours été de publier Nitra en Open Source. Après tout, c’est écrit en Nemerle, par l’équipe de Nemerle, et Nemerle est Open Source. Cependant, nous voulions attendre d’avoir une plate-forme principale prête à être ouverte davantage. Nous sentons que nous avons cela maintenant, alors nous y sommes.

Et bien sûr, nous acceptons les contributions ! Si vous souhaitez vous impliquer et aider à construire la prochaine génération d’outils linguistiques, jetez un coup d’œil, soulevez des problèmes, envoyez des demandes d’extraction.

S’il vous plaît laissez-nous savoir ce que vous pensez!

Development Source

Related Posts

RLEC 4.2.1 apporte des contrôles granulaires à la haute disponibilité et aux performances

RLEC 4.2.1 apporte des contrôles granulaires à la haute disponibilité et aux performances

Comment HolidayMe utilise Redis Enterprise comme base de données principale

Comment HolidayMe utilise Redis Enterprise comme base de données principale

Annonce de RedisGears 1.0 : un moteur sans serveur pour Redis

Annonce de RedisGears 1.0 : un moteur sans serveur pour Redis

Clés Redis dans la RAM |  Redis

Clés Redis dans la RAM | Redis

No Comment

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *