Je suis en train d'écrire une spécification de langage, et j'ai besoin de résoudre la question rudimentaire suivante. Supposons que je le (certes artificiel) syntaxe abstraite:Comment désigner la sémantique de cette syntaxe?
<A> ::= <B> | <C>
<B> ::= 1 | 2 | 3
<C> ::= 4 | 5 | 6
Qu'est-ce que la sémantique dénotationnelle pour ce regard de la langue comme? Les non-terminaux sont inclus dans '<' et '>' et les terminaux ne le sont pas. Je souhaite mapper 1
... 6
au domaine des nombres naturels. Ce qui ne me paraît pas du tout clair, c'est si je dois fournir des mappages pour les terminaux autres que les terminaux. Il semble que je ne devrais pas en avoir besoin puisque, par exemple, <A> ::= <B> | <C>
n'a aucune signification; c'est simplement un peu de structure. Ignorer, pour le moment que nous pourrait éliminer cette règle entièrement.
Ainsi, tel qu'il est, ce que je pense que la définition dénotation complète devrait ressembler, où le côté droit (en italique) représente la valeur correspondante des nombres naturels:
[[1]] =
un
[[2]] =
deux
[[3]] =
trois
[[4]] =
quatre
[[5]] =
cinq
[[6]] =
six
Esthétiquement, il ne semble pas étrange de parler A
, B
ou C
du tout, mais je suppose que ces symboles n'apparaîtra jamais dans un programme réel (comme: 4
), alors peut-être que cela suffit. Tous les documents que j'ai sur ce sujet omettent cet aspect très simple du processus de définition de la langue dans leurs discussions.