Hay dos partes de la semántica que deberá describir:
La semántica estática generalmente toma la forma de sistemas de tipos. Recomiendo mirar los libros de Benjamin C Pierce y Robert Harper . Alternativamente, puede escribir las reglas de programas bien formados como una colección de declaraciones (formales o informales) que describen las condiciones de validez de su programa. El enfoque formal adoptado por los sistemas de tipos proporciona un marco bien conocido para tales especificaciones.
Hay muchos formalismos para expresar la semántica dinámica a considerar como base:
- semántica denotacional --- da sentido en términos de dominios semánticos
- semántica operacional --- da significado en términos de cambios a los estados abstractos de una máquina
- semántica axiomática --- da sentido en términos de afirmaciones sobre el estado de la máquina
- semántica algebraica --- la semántica se define en términos de leyes algebraicas.
Debería haber muchos libros sobre estos temas. Una buena introducción introductoria es la semántica con aplicaciones de Nielson y Nielson . Una versión descargable está disponible en el sitio de los autores . También hay una edición más nueva, pero no la he visto.
Dentro de cada uno de estos, hay que tomar decisiones. Por ejemplo, si decide utilizar la semántica operativa, hay semántica de pasos grandes, semántica de pasos pequeños, semántica basada en sistemas de transición etiquetados, semántica basada en lógica de reescritura.
El tipo de enfoque que debe adoptar dependerá de qué tipo de lenguaje sea su DSL, qué tipo de experiencia tenga con el diseño de la semántica y sus preferencias personales.
Sin ningún detalle concreto, no puedo ayudar más.