ISO 7185:1990 dice esto sobre los comentarios en § 6.1.8:
Cuando un comentario será cualquier secuencia de caracteres y separaciones de las líneas, que no contiene ni tampoco} *), el constructo
('{' | '(*') comentario ('*)' | '}')
será un comentario si ni el ni el {(* ocurre dentro de un personaje-s tring o dentro de un comentario.
NOTAS
- Un comentario puede así comenzará con
{
y terminan con *)
, o comenzará con (*
y terminan con }
.
- La secuencia
(*)
no puede aparecer en un comentario aunque la secuencia {)
sí.
De acuerdo con eso, no hay esencialmente sólo un tipo de comentario. Aunque puede comenzar un comentario con {
o (*
, no puede usar diferentes conjuntos de caracteres para "ajustar" otros comentarios. Turbo Pascal, por otro lado, tiene dos tipos de comentarios, los que usan llaves y los que usan paréntesis.
Si usted tiene un comentario de estilo corsé y lo encierran en un comentario de estilo paréntesis para crear (*{}*)
, ISO dice el comentario es (*{}
con *)
de sobra, que será un error de sintaxis en el código, mientras que el Turbo Pascal dice el comentario es (*{}*)
sin texto.
Ninguno de los dos estilos permite envolver un comentario ya incluido en otro conjunto de delimitadores de comentarios. Eso es porque una vez que envuelve un comentario, el comentario "interno" deja de tratarse como un comentario. Es solo texto ordinario. Si tiene {(**)}
y desea envolverlo en un comentario al estilo de paréntesis para hacer (*{(**)}*)
, ISO y Turbo Pascal dicen que el comentario es (*{(**)
con }*)
sobrantes.
En los modos fpc y objfpc, Free Pascal admite comentarios anidados, por lo que mi ejemplo más reciente sería aceptado como un comentario válido sin texto sobrante. The FPC documentation on the matter en realidad no demuestra eso, sin embargo. Se da seis ejemplos de los comentarios supuestamente anidados:
{ Comment 1 (* comment 2 *) }
(* Comment 1 { comment 2 } *)
{ comment 1 // Comment 2 }
(* comment 1 // Comment 2 *)
// comment 1 (* comment 2 *)
// comment 1 { comment 2 }
Pero Turbo Pascal (o Delphi, para las dos últimas líneas), que ya hemos establecido no anidación de apoyo, aceptaría todo de esos como comentarios perfectamente válidos! FPC realmente admite comentarios anidados, pero esos ejemplos no lo ilustran. Estos son algunos ejemplos de comentarios anidados:
{ Comment 1 { comment 2 } }
(* Comment 1 (* comment 2 *) *)
{ Comment 1 (* comment 2 { comment 3 } *) }
incluso yo diría que los ejemplos tercero y cuarto de FPC son en realidad contraejemplos a la afirmación de que es compatible con FPC comentarios anidados. Esas dos líneas no deben ser comentarios completos en absoluto. El //
en el medio de la línea presenta un comentario que no finaliza hasta el final de la línea (EOL). El EOL viene después de}
y *)
, por lo que el comentario interno de estilo barra no puede haber terminado antes de que lleguemos a los paréntesis o los delimitadores entre paréntesis. Del mismo modo que <a> <b> </a> </b>
es un XML incorrectamente anidado, hemos anidado incorrectamente los comentarios: { // } EOL
.
Después de más experimentación, concluyo que en FPC, solo comentarios del mismo tipo nido. Por ejemplo, una vez que abre un comentario con {
, los caracteres (*
dejan de ser especiales. FPC no abrirá un comentario al estilo de paréntesis dentro del comentario al estilo corsé.Si lo hiciera, entonces {(*}
sería un error de sintaxis debido al comentario de paréntesis sin terminar. Podríamos explicar esto diciendo que la terminación de los comentarios internos es opcional cuando los comentarios son heterogéneos, pero es una explicación más simple decir que el comentario interno no se detecta como un comentario. Una vez que abre un comentario de tipo corsé, solo los corchetes tienen un significado. Además, //
en realidad no inicia un comentario de estilo barra cuando está dentro de llaves. Esa es una explicación más simple que decir que FPC permite que los comentarios estilo barra estén anidados incorrectamente. Puede decir que los comentarios de estilo de barra no anidan en absoluto, o que los comentarios de estilo de barra anidados en otros comentarios de barra de corte comparten un único terminador de EOL.
Su tarea probablemente signifique que debe usar el estilo de Turbo Pascal, donde los delimitadores de comentarios deben coincidir. Definitivamente no esperaba que utilizara el estilo de Free Pascal, ya que hubiera imposibilitado completar la tarea: un DFA no puede aceptar construcciones anidadas arbitrariamente.
Esto parece una pregunta que usted debe preguntar a su instructor. Revisa tu libro de texto, también. –
@Rob Kennedy, mi instructor y yo hablamos sobre esto antes de publicar la pregunta, y ya tengo el problema resuelto a su gusto. El libro no buscaba que profundizáramos en el tema, pero me gusta ser minucioso. Además, como indiqué en la pregunta, el libro no es específico sobre qué versión de Pascal se debe considerar, y dado que el libro es un libro de compilación y no un libro de Pascal, las convenciones de comentario del lenguaje no están explícitamente definidas, y eso es lo que estoy buscando en mi pregunta y definición explícita. – ubiquibacon