code: public Decl.Unit read() {
  		ArrayList<Decl> declarations = new ArrayList<>();
  		Name name = parseModuleName(source.getEntry());
  
  		skipWhiteSpace();
  		while (index < tokens.size()) {
  			Decl declaration;
  
  			declaration = parseDeclaration();
  
  			declarations.add(declaration);
  			skipWhiteSpace();
  		}
  		// Finally, construct the new file.
  		Tuple<Decl> decls = new Tuple<>(declarations);
  		Decl.Unit module = new Decl.Unit(name,decls);
  		// FIXME: update module list?
  		return parent.allocate(module);
  	}
docs: Read a <code>WhileyFile</code> from the token stream. If the stream is
  invalid in some way (e.g. contains a syntax error, etc) then a
  <code>SyntaxError</code> is thrown.
  
  @return