Décrire officiellement un nouveau langage de programmation spécifique à un domaine

8

Je suis sur le point de mettre en œuvre un langage spécifique au domaine pour la représentation des conventions d'apprentissage social. Une partie de l'implémentation est une description formelle d'un langage - son «calcul», ses symboles et ses expressions logiques.

Mon approche serait de décrire le langage en décrivant sa grammaire mais il y a aussi des concepts tels que les relations, les dialogues, les attentes qui nécessitent une approche plus théorique et la description de la logique.

Je voudrais demander un exemple et une recommandation de littérature (articles, livres) qui pourraient m'aider dans cette description. Je me sens relativement compétent dans l'approche de cette tâche, donc je ne demande pas une prise en main totale, mais l'aide d'un théoricien dans ce domaine serait grandement appréciée.

Edmon
la source
Les sons vraiment vraiment intéressants. Décrire la grammaire est le plus simple. Fournir de la sémantique pour des concepts spécifiques à un domaine est un domaine de recherche ouvert. Vous pouvez commencer par googler: "Langages spécifiques au domaine sémantique".
Dave Clarke
Que savez-vous déjà de l'écriture de la sémantique du langage formel?
Dave Clarke du

Réponses:

10

Vous devrez décrire deux parties de la sémantique:

  • sémantique statique : structure de programmes bien formés

  • sémantique dynamique : signification de l'exécution de programmations

La sémantique statique prend généralement la forme de systèmes de types. Je recommanderais de regarder les livres de Benjamin C Pierce et Robert Harper . Alternativement, vous pouvez écrire les règles des programmes bien formés sous forme d'un ensemble de déclarations (formelles ou informelles) décrivant les conditions de validité de votre programme. L'approche formelle adoptée par les systèmes de types fournit un cadre bien connu pour de telles spécifications.

Il existe de nombreux formalismes pour exprimer la sémantique dynamique à considérer comme base:

  • sémantique dénotationnelle - donne un sens en termes de domaines sémantiques
  • la sémantique opérationnelle --- donne un sens en termes de changements aux états d'une machine abstraite
  • sémantique axiomatique --- donne un sens en termes d'affirmations sur l'état de la machine
  • sémantique algébrique --- la sémantique est définie en termes de lois algébriques.

Il devrait y avoir beaucoup de livres sur ces sujets. Une bonne introduction générale est Nielson et Nielson's Semantics with Applications . Une version téléchargeable est disponible sur le site des auteurs . Il existe également une nouvelle édition, mais je ne l'ai pas vue.

Dans chacun d'eux, il y a des choix à faire. Par exemple, si vous décidez d'utiliser la sémantique opérationnelle, il y a la sémantique à grand pas, la sémantique à petit pas, la sémantique basée sur des systèmes de transition étiquetés, la sémantique basée sur la logique de réécriture.

Le type d'approche à adopter dépend du type de langage utilisé pour votre DSL, du type d'expérience que vous avez dans la conception de sémantique et de vos préférences personnelles.

Sans aucun détail concret, je ne peux pas aider davantage.

Dave Clarke
la source
@Edmon Je serais intéressé à en savoir plus.
Dave Clarke
Je partagerai certainement à mesure que je progresse. Je pourrais le faire sur mon blog et vous engager ainsi que le reste de la communauté ici car je rencontre des domaines avec lesquels j'ai besoin d'aide. Merci pour la bonne réponse.
Edmon