Reglas de sintaxis para "variable"

Reglas de sintaxis para "variable"

Tengo la última impresión deMetafuenteLibro(Octava edición, Volumen C). Desde esa impresión (y por tanto desde todas las demás impresiones), aparecieron dos correcciones muy curiosas enerratas:

1)

ingrese la descripción de la imagen aquí

Pregunta sobre esta corrección:

Asufijoes un conjunto vacío o cualquier número de <tag>s o <subscript>s en cualquier combinación (consulte las reglas de sintaxis en la página 54). Entonces, a <subscript>es un subconjunto desufijo. Por lo tanto no está claro por qué se dice

con sufijo o subíndice

como si fueran propiedades separadas.

2)

ingrese la descripción de la imagen aquí

Vale la pena poner aquí la definición de <suffix list>:

<suffix list> -> <suffix> | <suffix list>,<suffix>

Pregunta sobre esta corrección:

¿Cuál es algún ejemplo específico concreto para este caso?

Respuesta1

¿Qué significa "sufijo"? Normalmente dirías algo como "una variable con un sufijo". Pero a suffixtambién puede ser emptysegún las reglas de sintaxis, por lo que esto significaría quecadaLa variable tiene el sufijo. Por lo tanto, la suffixregla no es la mejor referencia para "sufijo". Entonces tenemos que usar un significado intuitivo de "sufijo". Ahora las variables como x.ay x[2]aparecen y a veces se comportan de manera diferente, por ejemplo x.ay x.bson completamente diferentes, pero x[1]y x[2]están mucho más conectadas. Especialmente después del comentario.

Pero 'x.k' no es lo mismo; es la etiqueta 'x' con el sufijo 'k', no la etiqueta 'x' con el valor de la variable k.

un lector podría suponer que x[k]no tiene "sufijo". Entonces, aunque "con sufijo" por sí solo debería ser suficiente, eso podría dar lugar a malentendidos en algunos casos, por lo que es más fácil simplemente agregar "o subíndice".

Un ejemplo del problema de la lista de sufijos es

newinternal x;
forsuffixes s = x1: show s; endfor
end;

Esto falla porque xno puede llevar el sufijo, por lo que x1no es válido. Por lo tanto x, lo que es an internal quantityy por tanto a variable, no es a suffixporque de lo contrario x1también sería un sufijo y estaría permitido en a suffix list.

En mi opinión, el problema aquí es que esto parece ser un problema suffix listmás que con la suffixdefinición: suponiendo que las variables internas no son sufijos, entonces

newinternal x;
y.x1 = 1;
end;

Tampoco debería funcionar, pero Metafont lo acepta.

Entonces la regla más precisa podría ser: una cantidad internaesun sufijo y el ejercicio 7.4 es verdadero, pero a suffix listes

<external suffix> -> <empty> | <subscript><suffix> | <external tag><suffix>
<suffix list> -> <external suffix> | <suffix list>,<external suffix>

Respuesta2

Esta es una pequeña adición a la respuesta aceptada: el resumen de mi entendimiento.


Corrección 1):

la frase "o subíndice" está ahí para agregar variables subíndices al significado "intuitivo" de "sufijo".

La cuestión es que en MetaFontBook hay dos significados de la palabra "sufijo": "general" (regla de sintaxis en la página 54) e "intuitivo" (algo no vacío que no sea el subíndice).

Corrección 2):

los siguientes ejemplos con x<tag>y x<subscript>no funcionan:

newinternal x;
forsuffixes s = x.k: show s; endfor
end
newinternal x;
forsuffixes s = x[1]: show s; endfor
end

los siguientes ejemplos con x<tag>y x<subscript>funcionan:

newinternal x;
y.x.k = 1;
end
newinternal x;
y.x[1] = 1;
end

Por lo tanto, la segunda corrección debe corregirse no solo como se dice en la respuesta aceptada, sino también para agregar " x<subscript>" a " x<tag>".

información relacionada