55d77c6b4a7119ef24ff4e7f4754f0e567b1f107
[sod] / doc / sod.toc
1 \contentsline {chapter}{Contents}{i}{chapter*.1}
2 \contentsline {part}{I\hspace {1em}Tutorial}{1}{part.1}
3 \contentsline {chapter}{\numberline {1}Tutorial}{3}{chapter.1}
4 \contentsline {section}{\numberline {1.1}Introduction}{3}{section.1.1}
5 \contentsline {subsection}{\numberline {1.1.1}Building programs with Sod}{4}{subsection.1.1.1}
6 \contentsline {section}{\numberline {1.2}A traditional trivial introduction}{4}{section.1.2}
7 \contentsline {part}{II\hspace {1em}Reference}{7}{part.2}
8 \contentsline {chapter}{\numberline {2}Concepts}{9}{chapter.2}
9 \contentsline {section}{\numberline {2.1}Classes and slots}{9}{section.2.1}
10 \contentsline {section}{\numberline {2.2}Messages and methods}{9}{section.2.2}
11 \contentsline {section}{\numberline {2.3}Metaclasses}{9}{section.2.3}
12 \contentsline {section}{\numberline {2.4}Modules}{9}{section.2.4}
13 \contentsline {chapter}{\numberline {3}Module syntax}{11}{chapter.3}
14 \contentsline {subsection}{\numberline {3.0.1}Lexical syntax}{11}{subsection.3.0.1}
15 \contentsline {subsubsection}{Identifiers}{11}{section*.2}
16 \contentsline {subsubsection}{String and character literals}{12}{section*.3}
17 \contentsline {subsubsection}{Integer literals}{12}{section*.4}
18 \contentsline {subsubsection}{Punctuation}{13}{section*.5}
19 \contentsline {subsubsection}{Comments}{13}{section*.6}
20 \contentsline {subsection}{\numberline {3.0.2}Special nonterminals}{13}{subsection.3.0.2}
21 \contentsline {subsubsection}{S-expressions}{13}{section*.7}
22 \contentsline {subsubsection}{C fragments}{13}{section*.8}
23 \contentsline {subsection}{\numberline {3.0.3}Module syntax}{14}{subsection.3.0.3}
24 \contentsline {subsection}{\numberline {3.0.4}Simple definitions}{14}{subsection.3.0.4}
25 \contentsline {subsubsection}{Importing modules}{14}{section*.9}
26 \contentsline {subsubsection}{Loading extensions}{14}{section*.10}
27 \contentsline {subsubsection}{Lisp escapes}{15}{section*.11}
28 \contentsline {subsubsection}{Declaring type names}{15}{section*.12}
29 \contentsline {subsection}{\numberline {3.0.5}Literal code}{15}{subsection.3.0.5}
30 \contentsline {subsection}{\numberline {3.0.6}Property sets}{16}{subsection.3.0.6}
31 \contentsline {subsubsection}{The expression evaluator}{16}{section*.13}
32 \contentsline {subsection}{\numberline {3.0.7}C types}{16}{subsection.3.0.7}
33 \contentsline {subsubsection}{Declaration specifiers}{17}{section*.14}
34 \contentsline {subsubsection}{Declarators}{17}{section*.15}
35 \contentsline {subsection}{\numberline {3.0.8}Defining classes}{18}{subsection.3.0.8}
36 \contentsline {subsubsection}{Forward declarations}{18}{section*.16}
37 \contentsline {subsubsection}{Full class definitions}{18}{section*.17}
38 \contentsline {subsubsection}{Slot items}{19}{section*.18}
39 \contentsline {subsubsection}{Initializer items}{20}{section*.19}
40 \contentsline {subsubsection}{Message items}{20}{section*.20}
41 \contentsline {subsubsection}{Method items}{20}{section*.21}
42 \contentsline {part}{III\hspace {1em}Lisp interface}{21}{part.3}
43 \contentsline {chapter}{\numberline {4}Protocol overview}{23}{chapter.4}
44 \contentsline {section}{\numberline {4.1}A tour through the translator}{23}{section.4.1}
45 \contentsline {section}{\numberline {4.2}Specification conventions}{23}{section.4.2}
46 \contentsline {subsection}{\numberline {4.2.1}Format of the entries}{24}{subsection.4.2.1}
47 \contentsline {chapter}{\numberline {5}Parsing}{27}{chapter.5}
48 \contentsline {section}{\numberline {5.1}The parser protocol}{27}{section.5.1}
49 \contentsline {section}{\numberline {5.2}File locations}{27}{section.5.2}
50 \contentsline {section}{\numberline {5.3}Scanners}{27}{section.5.3}
51 \contentsline {subsection}{\numberline {5.3.1}Basic scanner protocol}{27}{subsection.5.3.1}
52 \contentsline {subsection}{\numberline {5.3.2}Place-capture scanner protocol}{28}{subsection.5.3.2}
53 \contentsline {subsection}{\numberline {5.3.3}Scanner file-location protocol}{29}{subsection.5.3.3}
54 \contentsline {subsection}{\numberline {5.3.4}Character scanners}{29}{subsection.5.3.4}
55 \contentsline {subsubsection}{Stream access to character scanners}{30}{section*.22}
56 \contentsline {subsection}{\numberline {5.3.5}String scanners}{31}{subsection.5.3.5}
57 \contentsline {subsection}{\numberline {5.3.6}Character buffer scanners}{31}{subsection.5.3.6}
58 \contentsline {subsection}{\numberline {5.3.7}Token scanners}{32}{subsection.5.3.7}
59 \contentsline {subsection}{\numberline {5.3.8}List scanners}{33}{subsection.5.3.8}
60 \contentsline {section}{\numberline {5.4}Parsing macros}{33}{section.5.4}
61 \contentsline {section}{\numberline {5.5}Lexical analyser}{33}{section.5.5}
62 \contentsline {chapter}{\numberline {6}C language utilities}{35}{chapter.6}
63 \contentsline {section}{\numberline {6.1}C type representation}{35}{section.6.1}
64 \contentsline {subsection}{\numberline {6.1.1}Overview}{35}{subsection.6.1.1}
65 \contentsline {subsubsection}{Constructing C type objects}{35}{section*.23}
66 \contentsline {subsubsection}{Printing}{35}{section*.24}
67 \contentsline {subsection}{\numberline {6.1.2}The C type root class}{35}{subsection.6.1.2}
68 \contentsline {subsection}{\numberline {6.1.3}C type S-expression notation}{36}{subsection.6.1.3}
69 \contentsline {subsection}{\numberline {6.1.4}Comparing C types}{37}{subsection.6.1.4}
70 \contentsline {subsection}{\numberline {6.1.5}Outputting C types}{38}{subsection.6.1.5}
71 \contentsline {subsection}{\numberline {6.1.6}Type qualifiers and qualifiable types}{39}{subsection.6.1.6}
72 \contentsline {subsection}{\numberline {6.1.7}Leaf types}{40}{subsection.6.1.7}
73 \contentsline {subsection}{\numberline {6.1.8}Compound C types}{43}{subsection.6.1.8}
74 \contentsline {subsection}{\numberline {6.1.9}Pointer types}{43}{subsection.6.1.9}
75 \contentsline {subsection}{\numberline {6.1.10}Array types}{43}{subsection.6.1.10}
76 \contentsline {subsection}{\numberline {6.1.11}Function types}{44}{subsection.6.1.11}
77 \contentsline {subsection}{\numberline {6.1.12}Parsing C types}{45}{subsection.6.1.12}
78 \contentsline {section}{\numberline {6.2}Generating C code}{45}{section.6.2}
79 \contentsline {chapter}{\numberline {7}The output system}{47}{chapter.7}
80 \contentsline {part}{IV\hspace {1em}Appendices}{49}{part.4}
81 \contentsline {chapter}{\numberline {A}Cutting-room floor}{51}{appendix.A}
82 \contentsline {section}{\numberline {A.1}Generated names}{51}{section.A.1}
83 \contentsline {subsection}{\numberline {A.1.1}Instance layout}{51}{subsection.A.1.1}
84 \contentsline {section}{\numberline {A.2}Class objects}{51}{section.A.2}
85 \contentsline {section}{\numberline {A.3}Classes}{53}{section.A.3}
86 \contentsline {subsection}{\numberline {A.3.1}Classes and superclasses}{53}{subsection.A.3.1}
87 \contentsline {subsection}{\numberline {A.3.2}The class precedence list}{53}{subsection.A.3.2}
88 \contentsline {subsection}{\numberline {A.3.3}Instances and metaclasses}{53}{subsection.A.3.3}
89 \contentsline {subsection}{\numberline {A.3.4}Items and inheritance}{54}{subsection.A.3.4}
90 \contentsline {subsubsection}{Slots}{54}{section*.25}
91 \contentsline {subsubsection}{Initializers}{54}{section*.26}
92 \contentsline {subsubsection}{Messages}{54}{section*.27}
93 \contentsline {subsubsection}{Methods}{55}{section*.28}
94 \contentsline {subsection}{\numberline {A.3.5}Chains and instance layout}{55}{subsection.A.3.5}
95 \contentsline {section}{\numberline {A.4}Superclass linearization}{56}{section.A.4}
96 \contentsline {section}{\numberline {A.5}Invariance, covariance, contravariance}{57}{section.A.5}