Правила синтаксиса для `переменной`

Правила синтаксиса для `переменной`

У меня есть последняя распечаткаMetafontBook(8-е издание, том C). После этого издания (и, следовательно, после всех других изданий) в книге появились два весьма любопытных исправления.опечатки:

1)

введите описание изображения здесь

Вопрос относительно этого исправления:

Асуффиксявляется либо пустым множеством, либо любым числом <tag>s или <subscript>s в любой комбинации (см. правила синтаксиса на стр. 54). Таким образом, a <subscript>является подмножествомсуффикс. Поэтому не ясно, почему говорится

суффикс или подстрочный индекс

как будто это отдельные объекты недвижимости.

2)

введите описание изображения здесь

Стоит привести здесь определение <suffix list>:

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

Вопрос относительно этого исправления:

Какой конкретный пример можно привести в этом случае?

решение1

Что означает "суффиксированный"? Обычно вы бы сказали что-то вроде "переменная с суффиксом". Но a suffixтакже может быть emptyв соответствии с правилами синтаксиса, так что это будет означать, чтокаждыйпеременная суффиксирована. Поэтому suffixправило не является лучшим справочником для «суффиксированного». Поэтому нам придется использовать интуитивное значение «суффиксированного». Теперь переменные, такие как x.aи x[2]появляются и иногда ведут себя по-разному, например, x.aи x.bсовершенно разные, но x[1]и x[2]гораздо более связаны. Поэтому особенно после комментария

Но «x.k» — это не то же самое; это тег «x», дополненный тегом «k», а не тег «x», дополненный значением переменной k.

читатель может предположить, что x[k]это не "суффикс". Так что хотя "суффикс" сам по себе должен быть достаточным, но это может привести к недоразумениям в некоторых случаях, поэтому проще просто добавить "или с подписью".

Примером проблемы списка суффиксов является

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

Это не удается, потому что xне может быть суффиксом, поэтому x1является недопустимым. Следовательно x, , который является internal quantityи, следовательно variable, , не является , suffixпотому что в противном случае x1также был бы суффиксом и разрешен в suffix list.

По моему мнению, проблема здесь в том, что это проблема с определением suffix list, а не с suffixсамим определением: если предположить, что внутренние переменные не являются суффиксами, то

newinternal x;
y.x1 = 1;
end;

Это тоже не должно работать, но Metafont это принимает.

Поэтому более точным правилом может быть: внутренняя величинаявляетсясуффикс и Упражнение 7.4 верно, но а suffix listявляется

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

решение2

Это небольшое дополнение к принятому ответу — резюме моего понимания.


Исправление 1):

Фраза «или с индексом» используется для добавления индексированных переменных к «интуитивному» значению «суффикса».

Дело в том, что в MetaFontBook есть два значения слова «суффикс»: «общий» (правило синтаксиса на стр. 54) и «интуитивный» (нечто непустое, кроме нижнего индекса).

Исправление 2):

следующие примеры с x<tag>и x<subscript>не работают:

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

следующие примеры с x<tag>и x<subscript>работают:

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

Итак, вторую поправку необходимо исправить не только так, как сказано в принятом ответе, но и добавить « x<subscript>» к « x<tag>».

Связанный контент