anchor.diff:              fprintfn writer "numTerminals = %i;" terminalCount
               writer.WriteLine "productionToNonTerminalTable = _fsyacc_productionToNonTerminalTable;"
   
  -            // Write the closing bracket for the record.
  +            // Write the closing bracket for the record,
  +            // and an additional newline for spacing.
               writer.WriteLine "}"
  -
  -        // Emit the parser functions.
  -        writer.WriteLine "let engine lexer lexbuf startState = (tables ()).Interpret(lexer, lexbuf, startState)"
  -        writer.WriteLine "let spec lexer lexbuf : Specification ="
  +            writer.WriteLine ()
  +
  +        // Emit the parser "engine" function.
  +        writer.WriteLine "let engine lexer lexbuf startState ="
           IndentedTextWriter.indented writer <| fun writer ->
  -            writer.WriteLine "unbox ((tables ()).Interpret(lexer, lexbuf, 0))"
  +            writer.WriteLine "(tables ()).Interpret(lexer, lexbuf, startState)"
  +        writer.WriteLine ()
  +
  +        // Emit a parser function for each of the start symbols.
  +        typedStartSymbols
  +        |> Map.iter (fun startSymbol startSymbolType ->
  +            fprintfn writer "let %s lexer lexbuf : %s =" startSymbol startSymbolType
  +            IndentedTextWriter.indented writer <| fun writer ->
  +                writer.WriteLine "unbox ((tables ()).Interpret(lexer, lexbuf, 0))"
  +            writer.WriteLine ())
   
       //
       let private parserTypes (processedSpec : ProcessedSpecification<NonterminalIdentifier, TerminalIdentifier>) (writer : IndentedTextWriter) =
  
positive.code:                 | Some options ->
                      options
  
              (* TODO :   This backend places an additional restriction on the parser specification --
                          all start symbols (nonterminals) must produce the same type.
                          For now, we should implement a simple check for this and raise an exception
                          if they have different types; in the future, we should find a way to pass this
                          constraint into the Compiler.precompile function so it can provide a better
                          error message for the user. *)
  
              // Generate the code and write it to the specified file.
              using (File.CreateText fsyaccOptions.OutputPath) <| fun streamWriter ->
                  use indentedTextWriter =
  
negative.code:             // Emit the closing bracket of the array.
              writer.WriteLine "|]"
  
          // Write a blank line for readability.
          writer.WriteLine ()
  
      /// Emits code for an fsyacc-compatible parser into an IndentedTextWriter.
      let emit (processedSpec : ProcessedSpecification<NonterminalIdentifier, TerminalIdentifier>,
                  parserTable : Lr0ParserTable<NonterminalIdentifier, TerminalIdentifier>)
  