09:20 < Riastradh> If you plan to read the code, I suggest that you begin with four definitions that I'm about to supply, and then read classify.scm top to bottom. From there, read whatever other files interest you, perhaps sexp.scm to see how to use the macro expander, or standard.scm to see how the standard syntax is implemented. 09:21 < Riastradh> - a /form/ is an element of the input to the expander: a pair, a symbol, or a literal (or a syntactic closure); 09:21 < Riastradh> - a /denotation/ is the meaning of a name: a variable, a macro transformer, or a primitive classifier; 09:22 < Riastradh> - a /classification/ is an object describing the meaning of a form in some environment, with some internal structure: an expression, a definition, a keyword reference, &c.; 09:22 < Riastradh> - a /binding/ is a description of a definition that will remain in the output (which syntax definitions will not), produced after scanning bodies that contain definitions. 09:24 < Riastradh> The expander works in two steps: classification and compilation. The classifier maps forms to their classifications; it does this by repeatedly transforming macro invocations until the meaning of the form (as an expression, a definition, &c.) can be determined, and then ceases to descend until necessary. The compilation process actually generates the output. 22:53 < easy4> What is a selector? 22:53 < Riastradh> easy4, an object describing what subform of another object to select. 22:53 < Riastradh> (APPLY-SELECTOR CADR-SELECTOR FOO) is equivalent to (CADR FOO), for instance. 22:54 < Riastradh> They exist solely for the purpose of recording the expansion history. 22:56 < foof> Does it avoid (or remove post-facto) any identifier suffixes added for hygiene when they wouldn't be needed? 22:56 < Riastradh> I have not yet implemented that, but it is not hard.