mfprog: s706, Expanding the next token...It follows that get_x_next
might invoke itself recursively. In fact, there is massive recursion,
since macro expansion can involve the scanning of arbitrarily complex
expressions, which in turn involve macro expansion and conditionals,
etc. 


s796, Introduction to the parsing routines...By evaluating
expressions, from their primary constituents to ever larger
subexpressions, METAFONT builds the structures that ultimately define
fonts of type.
  Four mutually recursive subroutines are involved in this process: We
call them: scan_primary, scan_secondary, scan_tertiary, and
scan_expression. 
 ...
 Technically speaking, the parsing algorithms are ``LL(1)'' more or
less; backup mechanisms have been added in order to provide reasonable
error recovery.

mfprog: s706, Expanding the next token...It follows that get_x_next
might invoke itself recursively. In fact, there is massive recursion,
since macro expansion can involve the scanning of arbitrarily complex
expressions, which in turn involve macro expansion and conditionals,
etc. 


s796, Introduction to the parsing routines...By evaluating
expressions, from their primary constituents to ever larger
subexpressions, METAFONT builds the structures that ultimately define
fonts of type.
  Four mutually recursive subroutines are involved in this process: We
call them: scan_primary, scan_secondary, scan_tertiary, and
scan_expression. 
 ...
 Technically speaking, the parsing algorithms are ``LL(1)'' more or
less; backup mechanisms have been added in order to provide reasonable
error recovery.



DECLARATIVE:

s585, Dynamic linear equations ... Sometimes a dependent variable
becomes independent again, when one of the independent variables it
depends on is reverting to undefined. (types: known, dependent,
independent, numeric, undefined)

-----
LEXICAL ANALYSISmfprog: s706, Expanding the next token...It follows that get_x_next
might invoke itself recursively. In fact, there is massive recursion,
since macro expansion can involve the scanning of arbitrarily complex
expressions, which in turn involve macro expansion and conditionals,
etc. 


s796, Introduction to the parsing routines...By evaluating
expressions, from their primary constituents to ever larger
subexpressions, METAFONT builds the structures that ultimately define
fonts of type.
  Four mutually recursive subroutines are involved in this process: We
call them: scan_primary, scan_secondary, scan_tertiary, and
scan_expression. 
 ...
 Technically speaking, the parsing algorithms are ``LL(1)'' more or
less; backup mechanisms have been added in order to provide reasonable
error recovery.



mfb: p159:
      def rotatedaround(expr;,+)=
       shifted-; rotated+shifted; enddef;
 i.e., ; and + are used as parameters (instead of z and theta, for
example) 

mfb: p53:
  any symbolic token can actually be assigned a new meaning as a
program is performed.

PROCEDURES AS DATA:

mfb: p175

vardef <declared variable><parameter heading> ...
the declared variable might consist of several tokes, and you are
essentially defining a variable whose ``value'' is of type ``macro'' 
(Knuth cites analoge with Simula68)

SYNTAX

mfb: p178

The new things here are primarydef, secondarydef, and tertiarydef,
which permit you to extend METAFONT's repertoire of binary operators. 
...
A primarydef defines a binary operator that forms a secondary
expression from a secondary and a primary; such operators are at the
same level as ``*'' and ``rotated''
