\babel@toc {english}{}\relax \contentsline {section}{\numberline {1}A breif head note and introduction}{4}{section.1}% \contentsline {section}{\numberline {2}Analysis}{4}{section.2}% \contentsline {subsection}{\numberline {2.1}The current problem}{4}{subsection.2.1}% \contentsline {subsection}{\numberline {2.2}A solution}{4}{subsection.2.2}% \contentsline {subsection}{\numberline {2.3}What is a programming language}{5}{subsection.2.3}% \contentsline {subsubsection}{\numberline {2.3.1}A very simple explanation}{5}{subsubsection.2.3.1}% \contentsline {subsubsection}{\numberline {2.3.2}Why are there so many}{5}{subsubsection.2.3.2}% \contentsline {subsection}{\numberline {2.4}Researching and getting a scope of the project}{5}{subsection.2.4}% \contentsline {subsubsection}{\numberline {2.4.1}Examples of older similar projects}{5}{subsubsection.2.4.1}% \contentsline {subsubsection}{\numberline {2.4.2}Examples of newer similar projects}{6}{subsubsection.2.4.2}% \contentsline {subsubsection}{\numberline {2.4.3}What should be taken away from these languages}{6}{subsubsection.2.4.3}% \contentsline {subsection}{\numberline {2.5}Clients}{7}{subsection.2.5}% \contentsline {subsubsection}{\numberline {2.5.1}Client 1: Amy C}{7}{subsubsection.2.5.1}% \contentsline {subsubsection}{\numberline {2.5.2}Client 2: Rayn M}{7}{subsubsection.2.5.2}% \contentsline {subsubsection}{\numberline {2.5.3}Client 3: Myself}{7}{subsubsection.2.5.3}% \contentsline {subsection}{\numberline {2.6}Questionnaires}{7}{subsection.2.6}% \contentsline {subsubsection}{\numberline {2.6.1}Amy C, initial ideas}{7}{subsubsection.2.6.1}% \contentsline {subsubsection}{\numberline {2.6.2}Notes from questionnaire 1}{8}{subsubsection.2.6.2}% \contentsline {subsection}{\numberline {2.7}The first elements of the project}{8}{subsection.2.7}% \contentsline {section}{\numberline {3}Modelling}{9}{section.3}% \contentsline {subsection}{\numberline {3.1}Linked lists}{9}{subsection.3.1}% \contentsline {subsection}{\numberline {3.2}Dictionaries}{10}{subsection.3.2}% \contentsline {subsection}{\numberline {3.3}Prototyping harder features}{10}{subsection.3.3}% \contentsline {subsubsection}{\numberline {3.3.1}Abstract syntax trees (AST's) theory}{10}{subsubsection.3.3.1}% \contentsline {subsubsection}{\numberline {3.3.2}Abstract syntax trees (AST's) practical}{11}{subsubsection.3.3.2}% \contentsline {subsection}{\numberline {3.4}Feedback}{16}{subsection.3.4}% \contentsline {subsection}{\numberline {3.5}Mixing linked lists and AST's}{16}{subsection.3.5}% \contentsline {section}{\numberline {4}Objectives}{16}{section.4}% \contentsline {subsection}{\numberline {4.1}Core objectives}{16}{subsection.4.1}% \contentsline {subsection}{\numberline {4.2}Extra objectives}{17}{subsection.4.2}% \contentsline {section}{\numberline {5}Design}{17}{section.5}% \contentsline {subsection}{\numberline {5.1}Language specification}{17}{subsection.5.1}% \contentsline {subsection}{\numberline {5.2}Keywords}{17}{subsection.5.2}% \contentsline {subsection}{\numberline {5.3}Other code elements}{18}{subsection.5.3}% \contentsline {subsection}{\numberline {5.4}Memory management}{19}{subsection.5.4}% \contentsline {subsection}{\numberline {5.5}The steps in compiling a zippy program}{19}{subsection.5.5}% \contentsline {subsubsection}{\numberline {5.5.1}Converting zippy to C}{19}{subsubsection.5.5.1}% \contentsline {subsection}{\numberline {5.6}Actually using zippy}{19}{subsection.5.6}% \contentsline {subsection}{\numberline {5.7}Modelling the compilation process}{21}{subsection.5.7}% \contentsline {subsection}{\numberline {5.8}Modelling data structures I will use}{22}{subsection.5.8}% \contentsline {subsubsection}{\numberline {5.8.1}AstNode}{22}{subsubsection.5.8.1}% \contentsline {subsubsection}{\numberline {5.8.2}Array list}{22}{subsubsection.5.8.2}% \contentsline {subsection}{\numberline {5.9}Why so few?}{22}{subsection.5.9}% \contentsline {section}{\numberline {6}Implementation}{23}{section.6}% \contentsline {subsection}{\numberline {6.1}Main C code}{23}{subsection.6.1}% \contentsline {subsection}{\numberline {6.2}Header files}{35}{subsection.6.2}% \contentsline {subsection}{\numberline {6.3}The C linking process}{36}{subsection.6.3}% \contentsline {subsection}{\numberline {6.4}Zpypkg}{37}{subsection.6.4}% \contentsline {subsection}{\numberline {6.5}Zpylib}{39}{subsection.6.5}% \contentsline {subsection}{\numberline {6.6}Other libraries}{43}{subsection.6.6}% \contentsline {section}{\numberline {7}Testing}{43}{section.7}% \contentsline {subsection}{\numberline {7.1}Introduction}{43}{subsection.7.1}% \contentsline {subsection}{\numberline {7.2}Fibonacci}{43}{subsection.7.2}% \contentsline {subsubsection}{\numberline {7.2.1}Code}{43}{subsubsection.7.2.1}% \contentsline {subsubsection}{\numberline {7.2.2}Demo}{44}{subsubsection.7.2.2}% \contentsline {subsubsection}{\numberline {7.2.3}Performance}{44}{subsubsection.7.2.3}% \contentsline {subsection}{\numberline {7.3}String splitting}{45}{subsection.7.3}% \contentsline {subsubsection}{\numberline {7.3.1}Code}{45}{subsubsection.7.3.1}% \contentsline {subsubsection}{\numberline {7.3.2}Output}{45}{subsubsection.7.3.2}% \contentsline {subsubsection}{\numberline {7.3.3}Explaining}{46}{subsubsection.7.3.3}% \contentsline {subsection}{\numberline {7.4}zpypkg example}{46}{subsection.7.4}% \contentsline {subsubsection}{\numberline {7.4.1}Using zpypkg}{46}{subsubsection.7.4.1}% \contentsline {subsection}{\numberline {7.5}Space invaders}{46}{subsection.7.5}% \contentsline {subsubsection}{\numberline {7.5.1}Background}{46}{subsubsection.7.5.1}% \contentsline {subsubsection}{\numberline {7.5.2}Code}{46}{subsubsection.7.5.2}% \contentsline {subsubsection}{\numberline {7.5.3}Seeing it go}{49}{subsubsection.7.5.3}% \contentsline {section}{\numberline {8}Evaluation}{50}{section.8}% \contentsline {subsection}{\numberline {8.1}Core objectives}{50}{subsection.8.1}% \contentsline {subsection}{\numberline {8.2}Extra objectives}{51}{subsection.8.2}% \contentsline {subsection}{\numberline {8.3}Comparing the goals to the product}{51}{subsection.8.3}% \contentsline {subsubsection}{\numberline {8.3.1}A compiler for the Zippy language}{51}{subsubsection.8.3.1}% \contentsline {subsubsection}{\numberline {8.3.2}AST's used to compile source code}{51}{subsubsection.8.3.2}% \contentsline {subsubsection}{\numberline {8.3.3}A lisp like syntax}{51}{subsubsection.8.3.3}% \contentsline {subsubsection}{\numberline {8.3.4}Functional paradigm language}{51}{subsubsection.8.3.4}% \contentsline {subsubsection}{\numberline {8.3.5}Recursion}{52}{subsubsection.8.3.5}% \contentsline {subsubsection}{\numberline {8.3.6}Higher order functions}{52}{subsubsection.8.3.6}% \contentsline {subsubsection}{\numberline {8.3.7}A high performance language}{52}{subsubsection.8.3.7}% \contentsline {subsubsection}{\numberline {8.3.8}A package manager}{52}{subsubsection.8.3.8}% \contentsline {subsubsection}{\numberline {8.3.9}Ability to call C functions}{52}{subsubsection.8.3.9}% \contentsline {subsection}{\numberline {8.4}Thoughts on the core objectives}{53}{subsection.8.4}% \contentsline {subsection}{\numberline {8.5}Extra objectives}{53}{subsection.8.5}% \contentsline {section}{\numberline {9}Conclusion}{53}{section.9}% \contentsline {subsection}{\numberline {9.1}Final thoughts}{53}{subsection.9.1}%