Question

arrière-plan: - il existe des langages formels pour exprimer le lexique et la syntaxe valides du langage de programmation - de telles représentations (par exemple, expressions régulières et grammaires sans contexte) peuvent être automatiquement compilées dans des analyseurs de lexique / syntaxe pour certains langages de programmation à l'aide de certains outils (par exemple, LEX et YACC)

questions: - existe-t-il de tels langages formels pour définir la sémantique des langages de programmation? - existe-t-il des compilateurs à automatiser pour générer le code de l'analyseur sémantique basé sur ces langages formels? - des ressources à lire sur l’analyse sémantique du code source?

notes: - vous trouverez peut-être ma question irréaliste, c’est bon… Je suis un novice des compilateurs? - Par analyse sémantique, je veux dire vraiment collecter les informations nécessaires hors du code source pour les prochaines étapes d’optimisation et de génération de code… ceci devrait inclure la vérification de type / limite… etc.

j'espère que je me suis bien fait comprendre merci d'avance

Était-ce utile?

La solution

Il existe de nombreux systèmes pour définir la sémantique des langages de programmation: sémantique dénotationnelle (qui mappe la syntaxe en fonctions qui calculent l'état du programme); sémantique opérationnelle (ce qui revient à construire des interprètes pour votre langue), sémantique transformationnelle (ce qui revient à traduire votre langue en une autre langue pour laquelle une autre sémantique existe déjà), etc.

Très peu d’entre eux aboutissent actuellement à des systèmes utilisables pour de vrais langages de programmation. Une des autres réponses ici suggère Centaur comme un système qui essaie de faire cela. . = onepage & q = & f = false "rel =" nofollow noreferrer "> La sémantique de l'action de Peter Mosses est l'une des tentatives les plus sérieuses menées récemment.

Pour les systèmes réels, les méthodes les plus efficaces sont actuellement les plus efficaces. Ces systèmes inlude dans lesquels la syntaxe lexicale et grammaticale peut être efficacement défini (en tant que variantes de LEX et YACC) et construisent automatiquement des arbres. Les grammaires attributaires permettent de spécifier des calculs sur des arbres, qui permettent de définir certains types d'analyses, telles que la table des symboles construction ou métriques (techniquement, vous pourriez sémantique dénotationnelle de cette façon). La plupart des langages conventionnels (C, Java, C #, COBOL, ...) ont tous des structures relativement similaires en ce qui concerne le contrôle du flux et flux de données, et en conséquence, on peut construire des routines d'analyse de flux génériques permettre de raisonner sur de telles langues standard.

Enfin, vous avez besoin d’un objectif pour votre analyse sémantique: quels faits voulez-vous extraire exactement? L'analyse statique disponible systèmes ont des méthodes de code hybrides axées sur les modèles / procédurales pour collecte de la syntaxe, de la table des symboles et du flux de faits d'intérêt pour calculer des réponses spécifiques à des questions spécifiques.

Certains systèmes permettent d'utiliser ces informations sémantiques modification du code source.

Un système qui suit l'approche plus ad hoc ci-dessus est notre DMS Software Reengineering Toolkit , qui possède également les définitions génériques sémantiques (syntaxe, tables de symboles, analyse de flux de données) terminée pour de vrai langages tels que Java, C, C ++ et COBOL. DMS peut appliquer transformations de source à source en AST conditionnés par diverses procédures de collecte des faits, ce qui permet de transformation du code de manière fiable.

Autres conseils

Il existe de nombreux langages formels pour la programmation de la sémantique des langues - consultez la l'entrée wikipedia pour certains plus de termes à google. J'ai fait une petite quantité de Z au début de ma carrière (le lien vers le wiki des méthodes formelles est un autre endroit possible pour commencer à explorer). Je suggèrerais de demander sur le lambda le forum ultime , car ses utilisateurs en utilisent certains, et peut suggérer quoi utiliser quel que soit le cas d'utilisation que vous avez à l'esprit; cet article semble quelque peu lié à ce que vous avez demandé en termes de génération de compilateurs - vous avez besoin à la fois la sémantique du langage et une description de la machine cible pour créer un compilateur.

Spécifiquement pour une analyse statique, consultez http: //rw4.cs. uni-sb.de/~martin/pag/

Ce que vous décrivez correspond exactement à l'objet du projet Centaur:

http://www-sop.inria.fr/croap/centaur /centaur.html

En fait, vous pourriez très loin décrire la sémantique de votre langue, à un point tel que le système a pu vous donner un interprète pour cette langue (c’est à ce moment-là que vous avez décrit complètement la sémantique). Mais vous n'aviez pas à aller jusqu'au bout. Vous pourriez faire moins de travail de description et toujours obtenir un éditeur structuré et un vérificateur de type pour vos efforts.

Bien que le projet ait cessé (pour autant que je sache), vous pouvez trouver des articles intéressants et les télécharger dans les liens.

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