Это не так. Язык Metafont - это, в основном, макрорасширитель, работающий над потоком токенов. Это гениальный, но очень сложный дизайн, который позволяет изменять синтаксис во время выполнения. Токены не исправлены, как и на большинстве языков, но они являются переменными, их значение может быть изменено во время выполнения.
Metafont делает различие между лексемами, используемыми в качестве части имен переменных (названный тегов) и в качестве синтаксических элементов (названный искры). Когда парсер встречается с тегом, он сначала просматривает значение тега перед выполнением какой-либо оценки. Это приводит к тому, что смысл потока токенов может полностью измениться во время выполнения программы метафонов!
Рассмотрим следующий пример, в м-ф:
$ mf
This is METAFONT, Version 2.718281 (TeX Live 2013/Debian)
**expr
(/usr/share/texlive/texmf-dist/metafont/base/expr.mf
gimme an expr: 1plus5
>> plus5
gimme an expr: begingroup let plus=+ endgroup
>> vacuous
gimme an expr: 1plus5
>> 6
Маркер потока 1plus2
разбирает, как 1*plus2
, где plus2
является переменной, так как plus
определяется как тег. Во втором выражении мы переопределили plus
как искру с то же значение, что и +
. (begingroup
необходимо заключить команду в выражении). Когда мы снова разобрали 1plus5
, это означает 1 + 5
, так что оценка 6
!
Макрообъем в метафоне очень сложный, он может расширять переменные, , но искры также могут содержать макросы, с разными правилами расширения. Существуют также расширители для функций infix различной фиксации. Лучший способ узнать об этом - прочитать metafontbook.