anchor.diff:              | OutputFile _ -> "specify where the generated output will be stored. Defaults to the template's name."
               | ListTemplates -> "list the built-in templates."
   
  -type FarkleSkeletonScriptObject(grammarBase64: string, grammar: Grammar) =
  -    inherit ScriptObject()
  -    let mutable fileExt = "out"
  -
  -    member __.GrammarBase64 = grammarBase64
  -    member __.productions = grammar.Groups
  -
  -    member __.file_extension(ext) = fileExt <- ext
  -    [<ScriptMemberIgnore>]
  -    member __.FileExtension = "." + fileExt
  -
   let doSkeleton (args: ParseResults<_>) =
       if args.Contains <@ ListTemplates @> then
           BuiltinTemplates.getAllBuiltins() |> Array.iter (printfn "%s")
  
positive.code: 
          let template = Template.Parse(templateText, templateFile)
          let tc = TemplateContext()
          let so = FarkleSkeletonScriptObject(grammarBase64, grammar)
          tc.PushGlobal so
          let output = template.Render(tc)
  
          let outputFile = outputFile |> Option.defaultWith (fun () -> Path.ChangeExtension(grammarFile, so.FileExtension))
          File.WriteAllText(outputFile, output)
negative.code: 
  open Argu
  open Farkle
  open Farkle.Grammar.GOLDParser
  open Scriban
  open Scriban.Runtime
  