Je regarde dans la faisabilité de la rédaction d'un outil de formatage de code pour la langue Apex, une variation Salesforce.com sur Java et Perhams Visualforce, sa langue de balisage basée sur des balises. P>
Je n'ai aucune idée de l'endroit où commencer cela, à part le sentiment / sachant que la rédaction d'un analyseur de langue à partir de zéro n'est probablement pas la meilleure approche. P>
J'ai une compréhension assez mince de ce que c'est Antlr et ce qu'il fait, mais conceptuellement, j'imaginais que l'on pourrait "former" enertlr pour comprendre la syntaxe de l'apex. Je pourrais alors obtenir une version structurée du code dans une structure de données (AST?) Que je pouvais alors marcher pour produire du code correctement formaté. P>
Est-ce le bon concept? Antlr est-il un outil pour faire cela? Des liens vers un bref synopsis à ce sujet? Je cherche investir quelques jours dans cette tâche, pas des mois, et je ne suis pas sûr que c'est même vaguement réalisable. P>
4 Réponses :
Steven Hherod a écrit: em> strong> p>
... J'imagine que l'on pourrait «former» à l'antlr pour comprendre la syntaxe de l'apex. ... p> blockQuote>
Que voulez-vous dire par "'train' 'antlr" em>? "Train" comme dans l'intelligence artificielle (formation d'un réseau neural)? Si oui, alors vous vous trompez. P>
Steven Hherod a écrit: em> strong> p>
... Obtenez une version structurée du code dans une structure de données (AST?) que je pouvais alors marcher pour produire du code correctement formaté. P>
Est-ce le bon concept? Antlr est-il un outil pour faire cela? p> blockQuote>
Oui, plus ou moins. Vous écrivez une grammaire qui définit précisément la langue que vous voulez analyser. Ensuite, vous utilisez ANTLR qui générera un lexer (tokenizer) et un analyseur basé sur le fichier de grammaire. Vous pouvez laisser l'analyseur créer une AST à partir de votre source d'entrée, puis marcher la sortie / code / code AST et EMIT (personnalisé). P>
Steven Hherod a écrit: em> strong> p>
... Je cherche investir quelques jours dans cette tâche, pas des mois, et je ne suis pas sûr si c'est même vaguement réalisable. P> blockQuote>
Eh bien, je ne vous connais pas bien sûr, mais je dirais écrire une grammaire pour une langue semblable à Java, puis émettant de la production en marchant dans l'AST à quelques jours seulement est impossible, encore plus pour Quelqu'un nouveau à Antlr. Je suis assez familier avec Antlr, mais je ne pouvais pas le faire en quelques jours seulement. Notez que je ne parle que de la "partie analysante", après avoir fait cela, vous devrez l'intégrer dans un éditeur de texte. Tout cela semble être plus un projet de plusieurs mois, pas même des semaines, encore moins de plusieurs jours. P>
Donc, en bref, si tout ce que vous voulez faire est d'écrire un surligneur de code personnalisé, Antlr n'est pas votre meilleur choix. P>
Vous pourriez avoir un coup d'œil à xtext qui utilise antlr sous la hotte. Pour citer leur site Web: P>
avec xtext Vous pouvez facilement créer vos propres langues de programmation et des langues spécifiques à un domaine (DSLS). Le cadre appuie le développement d'infrastructures linguistiques, notamment des compilateurs et des interprètes, ainsi que de l'intégration de l'IDE Eclipse complète. ... em> p> blockQuote>
Mais je doute que vous ayez un plug-in Eclipse et courez dans quelques jours seulement. P>
Quoi qu'il en soit, bonne chance! p>
Par "train", je veux dire "configurer itérativement", je n'avais aucune attente d'IA impliquée :)
Étant donné que la syntaxe Apex est similaire à Java, je regarderais JDT de Eclipse. Éditez la grammaire Java pour correspondre à APEX. Faites les mêmes règles / options de formatage. C'est plus de quelques jours de travail. P>
C'est définitivement la bonne approche. Cependant, c'est un peu de travail. J'aime l'éclipse Java Auto-Formatter et j'ai examiné l'adoption à Apex il y a quelques mois, mais a décidé que c'était plus de travail que ce qu'il valait. Je suppose que cela m'aurait pris environ 2 semaines pour adapter le formateur JDT à Eclipse. Apex et Java sont évidemment assez similaires, mais il y a suffisamment de différences, et le formulaire de code assez complexe, qu'il ne semblait pas aussi simple que j'avais espéré. Si vous faites des progrès sur cela, laissez-moi savoir comme j'adorerais quelque chose comme ça.
Je ne suis pas convaincu que Salesforce ne se décompressera pas l'apex, sinon je pourrais être intéressé à mettre des efforts à cela. APEX est un subparent, probablement ne vaut probablement pas l'effort d'ingénierie à maintenir et pourrait être remplacé par une belle intégration avec vmforce ou héroku.
Notre Toolkit de réengagement logiciel DMS est conçu pour le faire comme type de poker -pot ante nécessaire pour faire n'importe quel type de projet de réingénierie de logiciel automatisé. P>
DMS permet de définir une grammaire, similaire aux styles d'AntlR (et d'autres générateurs d'analyseurs). Contrairement à AntlR (et à d'autres générateurs d'analyseurs), DMS utilise un analyseur GLR, ce qui signifie que vous n'avez pas à plier les règles de la grammaire de langue pour répondre aux exigences du générateur d'analyseurs. Si vous pouvez écrire une grammaire sans contexte, DMS convertira cela en un analyseur pour cette langue. Cela signifie en fait que vous pouvez obtenir un travail de travail, correct de la grammaire correcte considérablement plus rapide que les générateurs d'analyseurs typiques de LL ou L (AL) R. p>
Contrairement à AntlR (et à d'autres générateurs d'analyseurs), il n'y a pas de travail supplémentaire pour construire l'AST; Il est automatiquement construit. Cela signifie que vous passez le temps de zéro à écrire des règles de construction d'arbres et aucun ne les déboguer. p>
DMS fournit en outre une langue de spécification de jolie d'impression, spécifiant des zones de texte de pile verticalement, horizontalement ou indentées, dans laquelle vous pouvez définir le "format" utilisé pour convertir l'AST en arrière dans complètement em> texte de source légale et joliment formaté. Aucun des générateurs d'analyseurs bien connus ne fournit aucune aide ici; Si vous voulez prettivement l'arbre, vous obtenez beaucoup de codage personnalisé. Pour plus de détails sur cela, voyez ma réponse à Compilation d'un AST Retour à la source . Ce que cela signifie, vous pouvez construire une prettyprinter pour votre grammaire dans un après-midi (intense) en annotant simplement les règles de la grammaire avec des directives de la disposition de la boîte. p>
Lexer de DMS est très prudent de capturer des commentaires et des "formats lexicaux" (était ce numéro octal? Quel type de citations a fait cette chaîne? Caractères échappés?) Pour qu'ils puissent être régénérés correctement. Parse-To-AST, puis prettyprint-AST-TEX-TEX-TEXT ARRIENT du code de manière arbitraire laid dans le code formaté après les règles énormes. (Ce voyage aller-retour est le poker ante: si vous voulez aller plus loin, de manipuler réellement l'AST, vous voulez toujours pouvoir régénérer le texte de source valide). P>
Nous avons récemment construit un analyseur / prettyprinters pour EGL. Cela a pris environ une semaine à la fin. Accordé, nous sommes experts à nos outils. P>
Vous pouvez télécharger l'un des numéros de différents formateurs construits à l'aide de DMS à partir de notre site Web, pour voir ce que ce formatage peut faire. P>
edit juillet 2012: dernière semaine em> (5 jours) à l'aide de DMS, à partir de zéro nous (personnellement) construit un texte structuré entièrement conforme à IEC61131-3 "(langage de contrôle industriel, pascal) analyseur et prettyprinter. (Il gère tous les exemples des documents de normalisation). P>
La boîte à outils sonne bien quand j'ai lu à ce sujet. Y a-t-il une version d'essai / libre disponible?
Inverse Engineering Une langue pour obtenir un analyseur est difficile. Très dur! Même si c'est très proche de Java. p>
Mais pourquoi réinventer la roue? P>
Il y a une mise en oeuvre d'analyseur d'apex merveilleuse forte> dans le cadre de la Force.com IDE sur GitHub. C'est juste un pot sans code source mais vous pouvez l'utiliser pour tout ce que vous voulez. et les développeurs derrière elle sont vraiment favorables et utiles . P>
Nous construisons actuellement un module APEX du Analyseur de code statique Java célèbre PMD ici. Et nous utilisons Salesforce.com Parser interne. Il fonctionne comme un charme. p>
et hé, c'est un projet open source et nous avons besoin de contributeurs de tout type; -) em> p>
Bonjour Robert, quel est le statut à ce sujet? Est-ce complet?
Vous êtes donc simplement à la recherche de la syntaxe en surbrillance et de l'indigence automatique du code?
Essayez Notepad ++ et / ou Eclipse avec un plugin.
En regardant automatiquement en retrait principalement, mais la tarte dans le Sky Dream serait un outil de type CheckStyle.