diff --git a/WACCLangSpec.pdf b/WACCLangSpec.pdf
index 9645c6408b43da60a8416d4a6ec95fbc9905e349..ec6ee49b86446cd6c13ed0ad6d6a8f4b3965dcb9 100644
Binary files a/WACCLangSpec.pdf and b/WACCLangSpec.pdf differ
diff --git a/WACCLangSpec.tex b/WACCLangSpec.tex
index e7c72ce5600d99c99ae3ae565ef4b6dd26b99433..e1690664f5492fae31533e91a5a277f2885b364b 100644
--- a/WACCLangSpec.tex
+++ b/WACCLangSpec.tex
@@ -291,24 +291,27 @@ For example, in an \lit*{if} statement where we want to have an empty \lit*{else
 A variable declaration statement creates a new program variable in the current scope setting its static type and initial value.
 The statement must be given a valid WACC type \synt{type}, a variable name \synt{ident} and an initial assignment value \synt{assign-rhs}.
 
-Variable names must not clash with \hl{... ??? ...}
+Variable names must not clash with \hl{other variable names declared within the same
+scope.}
 
-They can consist \hl{... ??? ...}
+They can consist \hl{of either an underscore or a letter (uppercase or lowercase) followed by more
+underscores, letters (uppercase or lowercase) or numbers.}
 
 The initial assignment to a variable follows all of the assignment restrictions discussed in detail in the assignment statement section below.
 
-A variable must be declared before \hl{... ??? ...}
+A variable must be declared before \hl{before it is accessed or reassigned.}
 
-Any attempt to access an undeclared variable results in \hl{... ??? ...}
+Any attempt to access an undeclared variable results in \hl{a semantic error.}
 
 Additionally, every use of a variable must match the type assigned to that variable when it was declared.
 
 A variable can only be accessed within the scope of its declaration (or any child scope) and it is destroyed when exiting this scope.
 Variables must be unique within their scope, so a variable cannot be redefined within the same scope.
 Variables can, however, be redefined within a child scope.
-In this case \hl{... ??? ...}
+In this case \hl{the variable in the child scope overrides the one in the parent scope.}
 
-Once the child scope is exited \hl{... ??? ...}
+Once the child scope is exited \hl{the variable is no longer overridden and returns
+to its previous value.}
 
 \fillgap{\hl{Complete the above paragraph}}{5 marks}
 
@@ -365,7 +368,13 @@ The type of the expression given to the return statement must match the return t
 Once the return statement is executed, the function is immediately exited.
 
 \paragraph{Exit Statements:}
-\hl{... ??? ...}
+\hl{An exit statement, when called, ceases execution of the program. Hence, any
+  code placed below an exit call in the program will not be executed. It must be
+  given an integer, which is returned by the program as its exit code. The exit
+  code is an unsigned 8 bit integer, so is between 0 and 255. Any value, signed
+  or unsigned will be truncated into this store, such that $8\rightarrow8$,
+  $256\rightarrow0$, and $-1\rightarrow255$. A program does not need to have an
+  exit call; if one is not present the program exits safely with error code 0.}
 \fillgap{\hl{define exit statements}}{2 marks}
 
 \paragraph{Print Statements:}
@@ -376,6 +385,8 @@ The \lit{println} command is similar, but additionally prints out a new line aft
 The output representation of each expression evaluation depends on the type of the expression.
 The behaviour of the print statements for each type of expression is shown in Table~\ref{tab:print}, along with some example cases.
 
+\hl{All arrays, including char arrays, are not expressions so cannot be printed directly. The output above for arrays was received by assigning them to a variable and printing the variable instead.}
+
 \fillgap{\hl{Fill in Table}~\ref{tab:print}}{3 marks}
 %
 \begin{table}
@@ -390,11 +401,12 @@ The behaviour of the print statements for each type of expression is shown in Ta
     \hline
     \lit*{char} & Output a single-character string. & \lit*{\textquotesingle c\textquotesingle} & ``c'' \\
     \hline
-    \lit*{string} or \lit*{char[]} & \hl{???} & \hl{???} & \hl{???} \\
+    \lit*{string} or \lit*{char[]} & \hl{Output as a multiple character string.}
+                                & \hl{``a string''\\ \texttt{['a', ' ', 's','t','r','i','n','g']}} & \hl{``a string''} \\
     \hline
-    Other Array Types & \hl{???} & \hl{???} & \hl{???} \\  
+    Other Array Types & \hl{Output the address of the array in memory.} & \hl{\texttt{[1,2,3]}} & \hl{``\texttt{0x23168}''} \\  
     \hline
-    \lit*{pair} & \hl{???} & \lit*{newpair(a, b)}\footnotemark[1] & \hl{???} \\
+    \lit*{pair} & \hl{Output the address of the pair in memory.} & \lit*{newpair(a, b)}\footnotemark[1] & \hl{``\texttt{0x22150}''} \\
     \hline
   \end{tabulary}
   \caption{The behaviour of the print statements for each type of expression.}
@@ -412,15 +424,29 @@ Otherwise, the \lit{else} body statement is executed.
 Each of the program branches is executed in its own scope, which are denoted by the \lit{then} and \lit{else} tokens and the \lit{else} and \lit{fi} tokens, respectively.
 
 \paragraph{While Loop Statements:}
-\hl{... ??? ...}
+\hl{The condition of the loop must be an expression that returns a boolean
+  either by being a boolean literal or contains a boolean binary operator. A
+  variable with either of these assigned to it is also permitted. At the
+  beginning of each loop iteration the expression is evaluated. If the condition
+  evaluates to `{\tt true}' then the body of the loop is executed. Otherwise the
+  loop is not executed and the process moves to the next statement. The creation
+  of infinite loops is permitted as no statement that would cause the loop
+  condition to be made false is required. The body of the loop has its own scope
+  denoted by the `\texttt{do}' and `\texttt{done}' tokens.}
+
 \fillgap{\hl{Define/describe while loop statements}}{6 marks}
 
 \paragraph{Scoping Statements:}
 A scoping statement introduces a new program scope, which is denoted by the \lit{begin} and \lit{end} tokens.
 
 \paragraph{Sequential Composition:}
-\hl{... ??? ...}
-\fillgap{\hl{Define/describe sequential composition} \\ \hl{i.e. }\lit*{\hl{<stat> ; <stat>}} }{2 marks}
+\hl{Sequential composition is the concatenation of two statements. This is
+  denoted by \texttt{<stat> ; <stat>} with the execution of the statements going
+  in the order they appear. For example \texttt{p ; q} will be executed \texttt{p} then
+  \texttt{q}.}
+
+\fillgap{\hl{Define/describe sequential composition} \\ \hl{i.e.
+  }\lit*{\hl{<stat> ; <stat>}} }{2 marks}
 
 \subsection{Expressions}
 %%%%%%%%%%%%%%%%%%%%%%%%%
@@ -435,7 +461,8 @@ or an expression enclosed by parenthesis.
 We discuss the meaning of each of these expressions in more detail below.
 
 The expressions of the WACC language have been chosen to be side-effect free.
-\hl{... ??? ...}
+\hl{An expression is said to be side effect free if it doesnt modify a variable outside
+of itself. That is it does nothing else observable except from returning a value.}
 \fillgap{\hl{Define side-effect free expressions}}{1 mark}
 
 \paragraph{Integer Literals:}
@@ -458,14 +485,14 @@ The meaning of each escaped character is shown in Table~\ref{tab:escapedcharacte
     Representation & ASCII Value & Description & Symbol \\
     \hline
     \lit*{\char`\\ 0} & \lit*{0x00} & null terminator & NUL \\
-    \hl{???} & \lit*{0x08} & \hl{???} & \hl{???} \\
-    \hl{???} & \lit*{0x09} & \hl{???} & \hl{???}\ \\
-    \hl{???} & \lit*{0x0a} & \hl{???} & \hl{???} \\
-    \hl{???} & \lit*{0x0c} & \hl{???} & \hl{???} \\
-    \lit*{\char`\\ r} & \hl{???} & carriage return & CR \\
-    \lit*{\char`\\ "} & \hl{???} & double quote & " \\
-    \lit*{\char`\\ '} & \hl{???} & single quote & ' \\
-    \lit*{\char`\\ \char`\\} & \hl{???} & backslash & \textbackslash \\
+    \hl{\texttt{ \textbackslash b }} & \lit*{0x08} & \hl{Backspace} & \hl{BS} \\
+    \hl{\texttt{ \textbackslash t }} & \lit*{0x09} & \hl{Horizontal Tab} & \hl{TAB} \\
+    \hl{\texttt{ \textbackslash n }} & \lit*{0x0a} & \hl{New Line (Line Feed)} & \hl{LF} \\
+    \hl{\texttt{ \textbackslash f }} & \lit*{0x0c} & \hl{New Page (Form Feed)} & \hl{FF} \\
+    \lit*{\char`\\ r} & \hl{\texttt{0x0d}} & carriage return & CR \\
+    \lit*{\char`\\ "} & \hl{\texttt{0x22}} & double quote & " \\
+    \lit*{\char`\\ '} & \hl{\texttt{0x27}} & single quote & ' \\
+    \lit*{\char`\\ \char`\\} & \hl{\texttt{0x5c}} & backslash & \textbackslash \\
     \hline
   \end{tabular}
   \caption{The escaped-characters available in the WACC language.}
@@ -518,8 +545,8 @@ All unary operators have the same precedence, they are evaluated from right to l
     \lit{!} & \lit*{bool} & \lit*{bool} & Logical Not \\
     \lit{-} & \lit*{int} & \lit*{int} & Negation \\
     \lit{len} & T\lit*{[]} & \lit*{int} & Array Length \\
-    \lit{ord} & \hl{???} & \hl{???} & \hl{???} \\
-    \lit{chr} & \hl{???} & \hl{???} & \hl{???} \\
+    \lit{ord} & \hl{\texttt{char}} & \hl{\texttt{int}} & \hl{ASCII value of} \\
+    \lit{chr} & \hl{\texttt{int}} & \hl{\texttt{char}} & \hl{Character value of} \\
     \hline
   \end{tabulary}
   \caption{The unary operators of the WACC language with their types and meanings.}
@@ -534,9 +561,11 @@ returning \lit{true} if the sub-expression evaluates to \lit{false} and vice-ver
 
 \item The \lit{len} operator returns the length of the array referenced by the evaluation of its sub-expression.
 
-\item The \lit{ord} operator \hl{... ??? ...} \fillgap{\hl{Define/describe the }\lit{\hl{ord}} \hl{operator}}{1 mark}
+\item The \lit{ord} operator \hl{takes a char as its argument then returns the integer ASCII
+value the sub-expression evaluates to.} \fillgap{\hl{Define/describe the }\lit{\hl{ord}} \hl{operator}}{1 mark}
 
-\item The \lit{chr} operator \hl{... ??? ...} \fillgap{\hl{Define/describe the }\lit{\hl{chr}} \hl{operator}}{1 mark} 
+\item The \lit{chr} operator \hl{takes an integer value (an ASCII value) and returns the
+ASCII value its sub-expression evaluates to.} \fillgap{\hl{Define/describe the }\lit{\hl{chr}} \hl{operator}}{1 mark} 
 
 \end{itemize}
 
@@ -558,12 +587,12 @@ with 1 being the highest and 6 being the lowest.
     \lit{\%} & 1 & \lit*{int} & \lit*{int} & \lit*{int} & Modulus \\
     \lit{+} & 2 & \lit*{int} & \lit*{int} & \lit*{int} & Plus \\
     \lit{-} & 2 & \lit*{int} & \lit*{int} & \lit*{int} & Minus \\
-    \lit{>} & 3 & \hl{???} & \hl{???} & \hl{???} & Greater Than \\
-    \lit{>=} & 3 & \hl{???} & \hl{???} & \hl{???} & Greater Than or Equal \\
-    \lit{<} & 3 & \hl{???} & \hl{???} & \hl{???} & Less Than \\
-    \lit{<=} & 3 & \hl{???} & \hl{???} & \hl{???} & Less Than or Equal \\
-    \lit{==} & 4 & \hl{???} & \hl{???} & \hl{???} & Equality \\
-    \lit{!=} & 4 & \hl{???} & \hl{???} & \hl{???} & Inequality \\
+    \lit{>} & 3 & \hl{\texttt{int/char}} & \hl{\texttt{ int/char }} & \hl{\texttt{ bool} } & Greater Than \\
+    \lit{>=} & 3 & \hl{\texttt{ int/char} } & \hl{\texttt{ int/char} } & \hl{\texttt{bool}} & Greater Than or Equal \\
+    \lit{<} & 3 & \hl{\texttt{ int/char} } & \hl{\texttt{ int/char} } & \hl{\texttt{bool}} & Less Than \\
+    \lit{<=} & 3 & \hl{\texttt{ int/char} } & \hl{\texttt{ int/char} } & \hl{\texttt{bool}} & Less Than or Equal \\
+    \lit{==} & 4 & \hl{\texttt{int/bool/char/T[]/pair}} & \hl{\texttt{int/bool/char/T[]/pair}} & \hl{\texttt{bool}} & Equality \\
+    \lit{!=} & 4 & \hl{\texttt{ int/bool/char/T[]/pair }} & \hl{\texttt{ int/bool/char/T[]/pair} } & \hl{\texttt{bool}} & Inequality \\
     \lit{\&\&} & 5 & \lit*{bool} & \lit*{bool} & \lit*{bool} & Logical And \\
     \lit{||} & 6 & \lit*{bool} & \lit*{bool} & \lit*{bool} & Logical Or \\
     \hline
@@ -613,7 +642,10 @@ Any other type of occurrence of whitespace is ignored by the compiler.
 Note, in particular, that the code indentation in the example programs has no meaning, it simply aids readability. 
 Also note that whitespace inside a string or character literal is preserved by the compiler. 
 
-\hl{... ??? ...}
+\hl{Comments are a `\texttt{\#}' followed by a sequence of characters and
+  white-spaces. The comment will end at a newline. They can be put on
+  their own line or inline. No functional code can be placed inline after the
+  `\texttt{\#}'.}
 
 \fillgap{\hl{Define/describe comments}}{3 marks}