| 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} |