From 736741915c40e2a5a0732b5d1e93607bf6469e11 Mon Sep 17 00:00:00 2001 From: Arpad Ryszka Date: Tue, 9 Jan 2018 00:21:35 +0100 Subject: [PATCH] add parse command --- cmd/treerack/check.go | 8 +- cmd/treerack/check_test.go | 354 ++++----- cmd/treerack/checksyntax.go | 2 +- cmd/treerack/checksyntax_test.go | 225 +++--- cmd/treerack/doc.go | 4 + cmd/treerack/generate.go | 2 +- cmd/treerack/generate_test.go | 205 ++---- cmd/treerack/main_test.go | 17 + cmd/treerack/options.go | 6 +- cmd/treerack/parse.go | 98 +++ cmd/treerack/parse_test.go | 122 ++++ self/self.go | 1150 +++++++++++++++--------------- 12 files changed, 1182 insertions(+), 1011 deletions(-) create mode 100644 cmd/treerack/parse_test.go diff --git a/cmd/treerack/check.go b/cmd/treerack/check.go index 833e029..475ae0d 100644 --- a/cmd/treerack/check.go +++ b/cmd/treerack/check.go @@ -18,7 +18,7 @@ func check(args []string) int { o.command.flagSet.StringVar(&o.input.inline, "input-string", "", inputStringUsage) o.command.flagSet.StringVar(&o.input.fileName, "input", "", inputFileUsage) - if o.command.checkHelp() { + if o.command.help() { return 0 } @@ -26,13 +26,13 @@ func check(args []string) int { return code } - o.input.positional = o.command.flagSet.Args() - input, code := o.input.open() + s, code := o.syntax.openSyntax() if code != 0 { return code } - s, code := o.syntax.openSyntax() + o.input.positional = o.command.flagSet.Args() + input, code := o.input.open() if code != 0 { return code } diff --git a/cmd/treerack/check_test.go b/cmd/treerack/check_test.go index 9322f6c..6bd7eb8 100644 --- a/cmd/treerack/check_test.go +++ b/cmd/treerack/check_test.go @@ -2,195 +2,211 @@ package main import "testing" -func TestCheck(t *testing.T) { - runMainTest(t, - mainTest{ - title: "help", - args: []string{ - "treerack", "check", "-help", - }, - stdout: []string{ - checkUsage, - "-syntax", - "-syntax-string", - "-input", - "-input-string", - checkExample, - docRef, - }, +var checkFailureTests = []mainTest{ + { + title: "invalid flag", + args: []string{ + "treerack", "check", "-foo", }, + exit: -1, + stderr: []string{ + "-syntax", + "-syntax-string", + "-input", + "-input-string", + }, + }, - mainTest{ - title: "invalid flag", - args: []string{ - "treerack", "check", "-foo", - }, - exit: -1, - stderr: []string{ - "-syntax", - "-syntax-string", - "-input", - "-input-string", - }, + { + title: "multiple syntaxes", + args: []string{ + "treerack", "check", "-syntax", "foo.treerack", "-syntax-string", `foo = "bar"`, "-input-string", "bar", }, + exit: -1, + stderr: []string{ + "only one syntax", + "-syntax", + "-syntax-string", + "-input", + "-input-string", + }, + }, - mainTest{ - title: "multiple syntaxes", - args: []string{ - "treerack", "check", "-syntax", "foo.treerack", "-syntax-string", `foo = "bar"`, "-input-string", "bar", - }, - exit: -1, - stderr: []string{ - "only one syntax", - "-syntax", - "-syntax-string", - "-input", - "-input-string", - }, + { + title: "multiple inputs", + args: []string{ + "treerack", "check", "-syntax-string", `foo = "bar"`, "-input", "foo.txt", "-input-string", "bar", }, + exit: -1, + stderr: []string{ + "only one input", + "-syntax", + "-syntax-string", + "-input", + "-input-string", + }, + }, - mainTest{ - title: "multiple inputs", - args: []string{ - "treerack", "check", "-syntax-string", `foo = "bar"`, "-input", "foo.txt", "-input-string", "bar", - }, - exit: -1, - stderr: []string{ - "only one input", - "-syntax", - "-syntax-string", - "-input", - "-input-string", - }, + { + title: "multiple inputs, positional", + args: []string{ + "treerack", "check", "-syntax-string", `foo = "bar"`, "foo.txt", "bar.txt", }, + exit: -1, + stderr: []string{ + "only one input", + "-syntax", + "-syntax-string", + "-input", + "-input-string", + }, + }, - mainTest{ - title: "multiple inputs, positional", - args: []string{ - "treerack", "check", "-syntax-string", `foo = "bar"`, "foo.txt", "bar.txt", - }, - exit: -1, - stderr: []string{ - "only one input", - "-syntax", - "-syntax-string", - "-input", - "-input-string", - }, + { + title: "multiple inputs, positional and explicit file", + args: []string{ + "treerack", "check", "-syntax-string", `foo = "bar"`, "-input", "foo.txt", "bar.txt", }, + exit: -1, + stderr: []string{ + "only one input", + "-syntax", + "-syntax-string", + "-input", + "-input-string", + }, + }, - mainTest{ - title: "multiple inputs, positional and explicit file", - args: []string{ - "treerack", "check", "-syntax-string", `foo = "bar"`, "-input", "foo.txt", "bar.txt", - }, - exit: -1, - stderr: []string{ - "only one input", - "-syntax", - "-syntax-string", - "-input", - "-input-string", - }, + { + title: "no syntax", + args: []string{ + "treerack", "check", "-input-string", "foo", }, + exit: -1, + stderr: []string{ + "missing syntax", + "-syntax", + "-syntax-string", + "-input", + "-input-string", + }, + }, - mainTest{ - title: "no syntax", - args: []string{ - "treerack", "check", "-input-string", "foo", - }, - exit: -1, - stderr: []string{ - "missing syntax", - "-syntax", - "-syntax-string", - "-input", - "-input-string", - }, + { + title: "no input", + args: []string{ + "treerack", "check", "-syntax-string", `foo = "bar"`, }, + exit: -1, + stderr: []string{ + "missing input", + "-syntax", + "-syntax-string", + "-input", + "-input-string", + }, + }, - mainTest{ - title: "no input", - args: []string{ - "treerack", "check", "-syntax-string", `foo = "bar"`, - }, - exit: -1, - stderr: []string{ - "missing input", - "-syntax", - "-syntax-string", - "-input", - "-input-string", - }, + { + title: "invalid syntax", + args: []string{ + "treerack", "check", "-syntax-string", "foo", "-input-string", "foo", }, + exit: -1, + stderr: []string{ + "parse failed", + }, + }, - mainTest{ - title: "invalid syntax", - args: []string{ - "treerack", "check", "-syntax-string", "foo", "-input-string", "foo", - }, - exit: -1, - stderr: []string{ - "parse failed", - }, + { + title: "syntax file open fails", + args: []string{ + "treerack", "check", "-syntax", "noexist.treerack", "-input-string", "foo", }, + exit: -1, + stderr: []string{ + "file", + }, + }, - mainTest{ - title: "syntax file open fails", - args: []string{ - "treerack", "check", "-syntax", "noexist.treerack", "-input-string", "foo", - }, - exit: -1, - stderr: []string{ - "file", - }, + { + title: "input file open fails", + args: []string{ + "treerack", "check", "-syntax-string", `foo = "bar"`, "-input", "noexist.txt", }, + exit: -1, + stderr: []string{ + "file", + }, + }, - mainTest{ - title: "input file open fails", - args: []string{ - "treerack", "check", "-syntax-string", `foo = "bar"`, "-input", "noexist.txt", - }, - exit: -1, - stderr: []string{ - "file", - }, + { + title: "invalid input", + args: []string{ + "treerack", "check", "-syntax-string", `foo = "bar"`, "-input-string", "foo", }, - - mainTest{ - title: "syntax as file", - args: []string{ - "treerack", "check", "-syntax", "foo_test.treerack", "-input-string", "bar", - }, + exit: -1, + stderr: []string{ + "parse failed", }, - - mainTest{ - title: "syntax as string", - args: []string{ - "treerack", "check", "-syntax-string", `foo = "bar"`, "-input-string", "bar", - }, - }, - - mainTest{ - title: "input as stdin", - args: []string{ - "treerack", "check", "-syntax-string", `foo = "bar"`, - }, - stdin: "bar", - }, - - mainTest{ - title: "input as file", - args: []string{ - "treerack", "check", "-syntax-string", `foo = "bar"`, "-input", "bar_test.txt", - }, - }, - - mainTest{ - title: "input as string", - args: []string{ - "treerack", "check", "-syntax-string", `foo = "bar"`, "-input-string", "bar", - }, - }, - ) + }, +} + +var checkTests = []mainTest{ + { + title: "syntax as file", + args: []string{ + "treerack", "check", "-syntax", "foo_test.treerack", "-input-string", "bar", + }, + }, + + { + title: "syntax as string", + args: []string{ + "treerack", "check", "-syntax-string", `foo = "bar"`, "-input-string", "bar", + }, + }, + + { + title: "input as stdin", + args: []string{ + "treerack", "check", "-syntax-string", `foo = "bar"`, + }, + stdin: "bar", + }, + + { + title: "input as file", + args: []string{ + "treerack", "check", "-syntax-string", `foo = "bar"`, "-input", "bar_test.txt", + }, + }, + + { + title: "input as string", + args: []string{ + "treerack", "check", "-syntax-string", `foo = "bar"`, "-input-string", "bar", + }, + }, +} + +func TestCheck(t *testing.T) { + runMainTest(t, mainTest{ + title: "help", + args: []string{ + "treerack", "check", "-help", + }, + stdout: []string{ + checkUsage, + "-syntax", + "-syntax-string", + "-input", + "-input-string", + checkExample, + docRef, + }, + }) + + runMainTest(t, checkFailureTests...) + runMainTest(t, checkTests...) } diff --git a/cmd/treerack/checksyntax.go b/cmd/treerack/checksyntax.go index 5499dba..8426584 100644 --- a/cmd/treerack/checksyntax.go +++ b/cmd/treerack/checksyntax.go @@ -13,7 +13,7 @@ func checkSyntax(args []string) int { o.command.flagSet.StringVar(&o.syntax.inline, "syntax-string", "", syntaxStringUsage) o.command.flagSet.StringVar(&o.syntax.fileName, "syntax", "", syntaxFileUsage) - if o.command.checkHelp() { + if o.command.help() { return 0 } diff --git a/cmd/treerack/checksyntax_test.go b/cmd/treerack/checksyntax_test.go index 37a1a1b..a02683c 100644 --- a/cmd/treerack/checksyntax_test.go +++ b/cmd/treerack/checksyntax_test.go @@ -2,128 +2,133 @@ package main import "testing" -func TestCheckSyntax(t *testing.T) { - runMainTest(t, - mainTest{ - title: "help", - args: []string{ - "treerack", "check-syntax", "-help", - }, - stdout: []string{ - checkSyntaxUsage, - "-syntax", - "-syntax-string", - checkSyntaxExample, - docRef, - }, +var checkSyntaxFailureTests = []mainTest{ + { + title: "invalid flag", + args: []string{ + "treerack", "check-syntax", "-foo", }, + exit: -1, + stderr: []string{ + "-syntax", + "-syntax-string", + }, + }, - mainTest{ - title: "invalid flag", - args: []string{ - "treerack", "check-syntax", "-foo", - }, - exit: -1, - stderr: []string{ - "-syntax", - "-syntax-string", - }, + { + title: "multiple inputs", + args: []string{ + "treerack", "check-syntax", "-syntax", "foo.treerack", "-syntax-string", `foo = "bar"`, }, + exit: -1, + stderr: []string{ + "only one syntax", + "-syntax", + "-syntax-string", + }, + }, - mainTest{ - title: "multiple inputs", - args: []string{ - "treerack", "check-syntax", "-syntax", "foo.treerack", "-syntax-string", `foo = "bar"`, - }, - exit: -1, - stderr: []string{ - "only one syntax", - "-syntax", - "-syntax-string", - }, + { + title: "multiple inputs, positional", + args: []string{ + "treerack", "check-syntax", "foo.treerack", "bar.treerack", }, + exit: -1, + stderr: []string{ + "only one syntax", + "-syntax", + "-syntax-string", + }, + }, - mainTest{ - title: "multiple inputs, positional", - args: []string{ - "treerack", "check-syntax", "foo.treerack", "bar.treerack", - }, - exit: -1, - stderr: []string{ - "only one syntax", - "-syntax", - "-syntax-string", - }, + { + title: "multiple inputs, positional and explicit file", + args: []string{ + "treerack", "check-syntax", "-syntax", "foo.treerack", "bar.treerack", }, + exit: -1, + stderr: []string{ + "only one syntax", + "-syntax", + "-syntax-string", + }, + }, - mainTest{ - title: "multiple inputs, positional and explicit file", - args: []string{ - "treerack", "check-syntax", "-syntax", "foo.treerack", "bar.treerack", - }, - exit: -1, - stderr: []string{ - "only one syntax", - "-syntax", - "-syntax-string", - }, + { + title: "no input", + args: []string{ + "treerack", "check-syntax", }, + exit: -1, + stderr: []string{ + "missing syntax", + "-syntax", + "-syntax-string", + }, + }, - mainTest{ - title: "no input", - args: []string{ - "treerack", "check-syntax", - }, - exit: -1, - stderr: []string{ - "missing syntax", - "-syntax", - "-syntax-string", - }, + { + title: "invalid input", + args: []string{ + "treerack", "check-syntax", "-syntax-string", "foo", }, + exit: -1, + stderr: []string{ + "parse failed", + }, + }, - mainTest{ - title: "invalid input", - args: []string{ - "treerack", "check-syntax", "-syntax-string", "foo", - }, - exit: -1, - stderr: []string{ - "parse failed", - }, + { + title: "file open fails", + args: []string{ + "treerack", "check-syntax", "-syntax", "noexist.treerack", }, - - mainTest{ - title: "file open fails", - args: []string{ - "treerack", "check-syntax", "-syntax", "noexist.treerack", - }, - exit: -1, - stderr: []string{ - "file", - }, + exit: -1, + stderr: []string{ + "file", }, - - mainTest{ - title: "syntax as stdin", - args: []string{ - "treerack", "check-syntax", - }, - stdin: `foo = "bar"`, - }, - - mainTest{ - title: "syntax as file", - args: []string{ - "treerack", "check-syntax", "-syntax", "foo_test.treerack", - }, - }, - - mainTest{ - title: "syntax as string", - args: []string{ - "treerack", "check-syntax", "-syntax-string", `foo = "bar"`, - }, - }, - ) + }, +} + +var checkSyntaxTests = []mainTest{ + { + title: "syntax as stdin", + args: []string{ + "treerack", "check-syntax", + }, + stdin: `foo = "bar"`, + }, + + { + title: "syntax as file", + args: []string{ + "treerack", "check-syntax", "-syntax", "foo_test.treerack", + }, + }, + + { + title: "syntax as string", + args: []string{ + "treerack", "check-syntax", "-syntax-string", `foo = "bar"`, + }, + }, +} + +func TestCheckSyntax(t *testing.T) { + runMainTest(t, mainTest{ + title: "help", + args: []string{ + "treerack", "check-syntax", "-help", + }, + stdout: []string{ + checkSyntaxUsage, + "-syntax", + "-syntax-string", + checkSyntaxExample, + docRef, + }, + }) + + runMainTest(t, checkSyntaxFailureTests...) + runMainTest(t, checkSyntaxTests...) } diff --git a/cmd/treerack/doc.go b/cmd/treerack/doc.go index 1871138..b516fd1 100644 --- a/cmd/treerack/doc.go +++ b/cmd/treerack/doc.go @@ -28,6 +28,10 @@ const packageNameUsage = `package name of the generated Go code` const exportUsage = `when the export flag is set, the generated code will have exported symbols to allow using it as a separate package.` +const prettyUsage = `when the pretty flag is set, the AST will be pretty printed` + +const indentUsage = `string used for indentation of the printed AST` + const checkUsage = `'treerack check' takes a syntax description from a file or inline string, an arbitrary piece of text from the standard input, or a file, or inline string, and parses the input text with the defined syntax. It returns non-zero exit code and prints the problem if the provided syntax is not valid or the intput cannot be diff --git a/cmd/treerack/generate.go b/cmd/treerack/generate.go index a1ab7a8..cf8b308 100644 --- a/cmd/treerack/generate.go +++ b/cmd/treerack/generate.go @@ -19,7 +19,7 @@ func generate(args []string) int { o.command.flagSet.StringVar(&o.syntax.inline, "syntax-string", "", syntaxStringUsage) o.command.flagSet.StringVar(&o.syntax.fileName, "syntax", "", syntaxFileUsage) - if o.command.checkHelp() { + if o.command.help() { return 0 } diff --git a/cmd/treerack/generate_test.go b/cmd/treerack/generate_test.go index 065356f..dc82905 100644 --- a/cmd/treerack/generate_test.go +++ b/cmd/treerack/generate_test.go @@ -2,161 +2,70 @@ package main import "testing" -func TestGenerate(t *testing.T) { - runMainTest(t, - mainTest{ - title: "help", - args: []string{ - "treerack", "generate", "-help", - }, - stdout: []string{ - generateUsage, - "-export", - "-package-name", - "-syntax", - "-syntax-string", - generateExample, - docRef, - }, - }, +var generateFailureTests = convertTests("generate", checkSyntaxFailureTests) - mainTest{ - title: "invalid flag", - args: []string{ - "treerack", "generate", "-foo", - }, - exit: -1, - stderr: []string{ - "-export", - "-package-name", - "-syntax", - "-syntax-string", - }, +var generateTests = []mainTest{ + { + title: "failing output", + args: []string{ + "treerack", "generate", "-syntax-string", `foo = "bar"`, }, + failingOutput: true, + exit: -1, + }, - mainTest{ - title: "multiple inputs", - args: []string{ - "treerack", "generate", "-syntax", "foo.treerack", "-syntax-string", `foo = "bar"`, - }, - exit: -1, - stderr: []string{ - "only one syntax", - "-export", - "-package-name", - "-syntax", - "-syntax-string", - }, + { + title: "syntax as stdin", + args: []string{ + "treerack", "generate", "-export", "-package-name", "foo", }, + stdin: `foo = "bar"`, + stdout: []string{ + "package foo", + "func Parse", + }, + }, - mainTest{ - title: "multiple inputs, positional", - args: []string{ - "treerack", "generate", "foo.treerack", "bar.treerack", - }, - exit: -1, - stderr: []string{ - "only one syntax", - "-export", - "-package-name", - "-syntax", - "-syntax-string", - }, + { + title: "syntax as file", + args: []string{ + "treerack", "generate", "-export", "-package-name", "foo", "-syntax", "foo_test.treerack", }, + stdout: []string{ + "package foo", + "func Parse", + }, + }, - mainTest{ - title: "multiple inputs, positional and explicit file", - args: []string{ - "treerack", "generate", "-syntax", "foo.treerack", "bar.treerack", - }, - exit: -1, - stderr: []string{ - "only one syntax", - "-export", - "-package-name", - "-syntax", - "-syntax-string", - }, + { + title: "syntax as string", + args: []string{ + "treerack", "generate", "-export", "-package-name", "foo", "-syntax-string", `foo = "bar"`, }, - - mainTest{ - title: "no input", - args: []string{ - "treerack", "generate", - }, - exit: -1, - stderr: []string{ - "missing syntax", - "-export", - "-package-name", - "-syntax", - "-syntax-string", - }, + stdout: []string{ + "package foo", + "func Parse", }, - - mainTest{ - title: "invalid input", - args: []string{ - "treerack", "generate", "-syntax-string", "foo", - }, - exit: -1, - stderr: []string{ - "parse failed", - }, - }, - - mainTest{ - title: "file open fails", - args: []string{ - "treerack", "generate", "-syntax", "noexist.treerack", - }, - exit: -1, - stderr: []string{ - "file", - }, - }, - - mainTest{ - title: "failing output", - args: []string{ - "treerack", "generate", "-syntax-string", `foo = "bar"`, - }, - failingOutput: true, - exit: -1, - }, - - mainTest{ - title: "syntax as stdin", - args: []string{ - "treerack", "generate", "-export", "-package-name", "foo", - }, - stdin: `foo = "bar"`, - stdout: []string{ - "package foo", - "func Parse", - }, - }, - - mainTest{ - title: "syntax as file", - args: []string{ - "treerack", "generate", "-export", "-package-name", "foo", "-syntax", "foo_test.treerack", - }, - stdout: []string{ - "package foo", - "func Parse", - }, - }, - - mainTest{ - title: "syntax as string", - args: []string{ - "treerack", "generate", "-export", "-package-name", "foo", "-syntax-string", `foo = "bar"`, - }, - stdout: []string{ - "package foo", - "func Parse", - }, - }, - ) + }, +} + +func TestGenerate(t *testing.T) { + runMainTest(t, mainTest{ + title: "help", + args: []string{ + "treerack", "generate", "-help", + }, + stdout: []string{ + generateUsage, + "-syntax", + "-syntax-string", + "-export", + "-package-name", + generateExample, + docRef, + }, + }) + + runMainTest(t, generateFailureTests...) + runMainTest(t, generateTests...) } diff --git a/cmd/treerack/main_test.go b/cmd/treerack/main_test.go index f727fd0..34068d3 100644 --- a/cmd/treerack/main_test.go +++ b/cmd/treerack/main_test.go @@ -32,6 +32,23 @@ func init() { isTest = true } +func convertTest(cmd string, t mainTest) mainTest { + args := make([]string, len(t.args)) + copy(args, t.args) + args[1] = cmd + t.args = args + return t +} + +func convertTests(cmd string, t []mainTest) []mainTest { + tt := make([]mainTest, len(t)) + for i := range t { + tt[i] = convertTest(cmd, t[i]) + } + + return tt +} + func mockArgs(args ...string) (reset func()) { original := os.Args os.Args = args diff --git a/cmd/treerack/options.go b/cmd/treerack/options.go index 5674fa8..9c51d75 100644 --- a/cmd/treerack/options.go +++ b/cmd/treerack/options.go @@ -38,7 +38,7 @@ func (o *commandOptions) parseArgs() (exit int) { return } -func (o *commandOptions) help() { +func (o *commandOptions) printHelp() { stdout(o.usage) stdout() @@ -52,11 +52,11 @@ func (o *commandOptions) help() { stdout(docRef) } -func (o *commandOptions) checkHelp() bool { +func (o *commandOptions) help() bool { if len(o.args) == 0 || o.args[0] != "-help" { return false } - o.help() + o.printHelp() return true } diff --git a/cmd/treerack/parse.go b/cmd/treerack/parse.go index fc820b8..ddd9e8c 100644 --- a/cmd/treerack/parse.go +++ b/cmd/treerack/parse.go @@ -1,5 +1,103 @@ package main +import ( + "encoding/json" + + "github.com/aryszka/treerack" +) + +type parseOptions struct { + command *commandOptions + syntax *fileOptions + input *fileOptions + pretty bool + indent string +} + +type node struct { + Name string `json:"name"` + From int `json:"from"` + To int `json:"to"` + Text string `json:"text,omitempty"` + Nodes []*node `json:"nodes,omitempty"` +} + +func mapNode(n *treerack.Node) *node { + var nn node + nn.Name = n.Name + nn.From = n.From + nn.To = n.To + + if len(n.Nodes) == 0 { + nn.Text = n.Text() + return &nn + } + + for i := range n.Nodes { + nn.Nodes = append(nn.Nodes, mapNode(n.Nodes[i])) + } + + return &nn +} + func parse(args []string) int { + var o parseOptions + o.command = initOptions(parseUsage, parseExample, args) + o.syntax = &fileOptions{typ: "syntax", flagSet: o.command.flagSet} + o.input = &fileOptions{typ: "input", flagSet: o.command.flagSet} + + o.command.flagSet.StringVar(&o.syntax.inline, "syntax-string", "", syntaxStringUsage) + o.command.flagSet.StringVar(&o.syntax.fileName, "syntax", "", syntaxFileUsage) + + o.command.flagSet.StringVar(&o.input.inline, "input-string", "", inputStringUsage) + o.command.flagSet.StringVar(&o.input.fileName, "input", "", inputFileUsage) + + o.command.flagSet.BoolVar(&o.pretty, "pretty", false, prettyUsage) + o.command.flagSet.StringVar(&o.indent, "indent", "", indentUsage) + + if o.command.help() { + return 0 + } + + if code := o.command.parseArgs(); code != 0 { + return code + } + + s, code := o.syntax.openSyntax() + if code != 0 { + return code + } + + o.input.positional = o.command.flagSet.Args() + input, code := o.input.open() + if code != 0 { + return code + } + + n, err := s.Parse(input) + if err != nil { + stderr(err) + return -1 + } + + nn := mapNode(n) + + marshal := json.Marshal + if o.pretty || o.indent != "" { + if o.indent == "" { + o.indent = " " + } + + marshal = func(n interface{}) ([]byte, error) { + return json.MarshalIndent(n, "", o.indent) + } + } + + b, err := marshal(nn) + if err != nil { + stderr(err) + } + + stdout(string(b)) return 0 } diff --git a/cmd/treerack/parse_test.go b/cmd/treerack/parse_test.go new file mode 100644 index 0000000..4a74909 --- /dev/null +++ b/cmd/treerack/parse_test.go @@ -0,0 +1,122 @@ +package main + +import "testing" + +var parseFailureTests = convertTests("parse", checkFailureTests) + +var parseTests = []mainTest{ + { + title: "syntax as file", + args: []string{ + "treerack", "parse", "-syntax", "foo_test.treerack", "-input-string", "bar", + }, + stdout: []string{ + `"name":"foo"`, + }, + }, + + { + title: "syntax as string", + args: []string{ + "treerack", "parse", "-syntax-string", `foo = "bar"`, "-input-string", "bar", + }, + stdout: []string{ + `"name":"foo"`, + }, + }, + + { + title: "input as stdin", + args: []string{ + "treerack", "parse", "-syntax-string", `foo = "bar"`, + }, + stdin: "bar", + stdout: []string{ + `"name":"foo"`, + }, + }, + + { + title: "input as file", + args: []string{ + "treerack", "parse", "-syntax-string", `foo = "bar"`, "-input", "bar_test.txt", + }, + stdout: []string{ + `"name":"foo"`, + }, + }, + + { + title: "input as string", + args: []string{ + "treerack", "parse", "-syntax-string", `foo = "bar"`, "-input-string", "bar", + }, + stdout: []string{ + `"name":"foo"`, + }, + }, + + { + title: "pretty", + args: []string{ + "treerack", "parse", "-syntax-string", `foo = "bar"`, "-input-string", "bar", "-pretty", + }, + stdout: []string{ + ` "name": "foo"`, + }, + }, + + { + title: "pretty and indent", + args: []string{ + "treerack", "parse", "-syntax-string", `foo = "bar"`, "-input-string", "bar", "-pretty", "-indent", "xx", + }, + stdout: []string{ + `xx"name": "foo"`, + }, + }, + + { + title: "indent without pretty", + args: []string{ + "treerack", "parse", "-syntax-string", `foo = "bar"`, "-input-string", "bar", "-pretty", "-indent", "xx", + }, + stdout: []string{ + `xx"name": "foo"`, + }, + }, + + { + title: "with child nodes", + args: []string{ + "treerack", "parse", "-syntax-string", `foo = "bar"; doc = foo`, "-input-string", "bar", + }, + stdout: []string{ + `"nodes":[`, + `"text":"bar"`, + }, + }, +} + +func TestParse(t *testing.T) { + runMainTest(t, mainTest{ + title: "help", + args: []string{ + "treerack", "parse", "-help", + }, + stdout: []string{ + parseUsage, + "-syntax", + "-syntax-string", + "-input", + "-input-string", + "-pretty", + "-indent", + parseExample, + docRef, + }, + }) + + runMainTest(t, parseFailureTests...) + runMainTest(t, parseTests...) +} diff --git a/self/self.go b/self/self.go index 50a1b4d..cea4cea 100644 --- a/self/self.go +++ b/self/self.go @@ -741,598 +741,598 @@ func Parse(r io.Reader) (*Node, error) { var p188 = sequenceParser{id: 188, commit: 32, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} var p186 = choiceParser{id: 186, commit: 2} var p185 = choiceParser{id: 185, commit: 70, name: "wsc", generalizations: []int{186}} - var p38 = choiceParser{id: 38, commit: 66, name: "wschar", generalizations: []int{185, 186}} - var p25 = sequenceParser{id: 25, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{38, 185, 186}} - var p6 = charParser{id: 6, chars: []rune{32}} - p25.items = []parser{&p6} - var p26 = sequenceParser{id: 26, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{38, 185, 186}} - var p110 = charParser{id: 110, chars: []rune{9}} - p26.items = []parser{&p110} - var p111 = sequenceParser{id: 111, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{38, 185, 186}} - var p100 = charParser{id: 100, chars: []rune{10}} - p111.items = []parser{&p100} - var p136 = sequenceParser{id: 136, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{38, 185, 186}} - var p142 = charParser{id: 142, chars: []rune{8}} - p136.items = []parser{&p142} - var p101 = sequenceParser{id: 101, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{38, 185, 186}} - var p7 = charParser{id: 7, chars: []rune{12}} - p101.items = []parser{&p7} - var p147 = sequenceParser{id: 147, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{38, 185, 186}} - var p170 = charParser{id: 170, chars: []rune{13}} - p147.items = []parser{&p170} - var p63 = sequenceParser{id: 63, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{38, 185, 186}} - var p44 = charParser{id: 44, chars: []rune{11}} - p63.items = []parser{&p44} - p38.options = []parser{&p25, &p26, &p111, &p136, &p101, &p147, &p63} - var p18 = sequenceParser{id: 18, commit: 72, name: "comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}, generalizations: []int{185, 186}} - var p138 = choiceParser{id: 138, commit: 74, name: "comment-segment"} - var p20 = sequenceParser{id: 20, commit: 74, name: "line-comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}, generalizations: []int{138}} - var p124 = sequenceParser{id: 124, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var p182 = charParser{id: 182, chars: []rune{47}} - var p143 = charParser{id: 143, chars: []rune{47}} - p124.items = []parser{&p182, &p143} - var p128 = sequenceParser{id: 128, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p77 = charParser{id: 77, not: true, chars: []rune{10}} - p128.items = []parser{&p77} - p20.items = []parser{&p124, &p128} - var p76 = sequenceParser{id: 76, commit: 74, name: "block-comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{138}} - var p103 = sequenceParser{id: 103, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var p123 = charParser{id: 123, chars: []rune{47}} - var p93 = charParser{id: 93, chars: []rune{42}} - p103.items = []parser{&p123, &p93} - var p8 = choiceParser{id: 8, commit: 10} - var p81 = sequenceParser{id: 81, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{8}} - var p27 = sequenceParser{id: 27, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p112 = charParser{id: 112, chars: []rune{42}} - p27.items = []parser{&p112} - var p173 = sequenceParser{id: 173, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p64 = charParser{id: 64, not: true, chars: []rune{47}} - p173.items = []parser{&p64} - p81.items = []parser{&p27, &p173} - var p89 = sequenceParser{id: 89, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{8}} - var p118 = charParser{id: 118, not: true, chars: []rune{42}} - p89.items = []parser{&p118} - p8.options = []parser{&p81, &p89} - var p47 = sequenceParser{id: 47, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var p137 = charParser{id: 137, chars: []rune{42}} + var p56 = choiceParser{id: 56, commit: 66, name: "wschar", generalizations: []int{185, 186}} + var p162 = sequenceParser{id: 162, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{56, 185, 186}} + var p138 = charParser{id: 138, chars: []rune{32}} + p162.items = []parser{&p138} + var p140 = sequenceParser{id: 140, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{56, 185, 186}} + var p139 = charParser{id: 139, chars: []rune{9}} + p140.items = []parser{&p139} + var p112 = sequenceParser{id: 112, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{56, 185, 186}} + var p141 = charParser{id: 141, chars: []rune{10}} + p112.items = []parser{&p141} + var p54 = sequenceParser{id: 54, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{56, 185, 186}} + var p133 = charParser{id: 133, chars: []rune{8}} + p54.items = []parser{&p133} + var p99 = sequenceParser{id: 99, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{56, 185, 186}} + var p98 = charParser{id: 98, chars: []rune{12}} + p99.items = []parser{&p98} + var p121 = sequenceParser{id: 121, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{56, 185, 186}} + var p21 = charParser{id: 21, chars: []rune{13}} + p121.items = []parser{&p21} + var p168 = sequenceParser{id: 168, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{56, 185, 186}} + var p55 = charParser{id: 55, chars: []rune{11}} + p168.items = []parser{&p55} + p56.options = []parser{&p162, &p140, &p112, &p54, &p99, &p121, &p168} + var p101 = sequenceParser{id: 101, commit: 72, name: "comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}, generalizations: []int{185, 186}} + var p175 = choiceParser{id: 175, commit: 74, name: "comment-segment"} + var p77 = sequenceParser{id: 77, commit: 74, name: "line-comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}, generalizations: []int{175}} + var p76 = sequenceParser{id: 76, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var p18 = charParser{id: 18, chars: []rune{47}} var p57 = charParser{id: 57, chars: []rune{47}} - p47.items = []parser{&p137, &p57} - p76.items = []parser{&p103, &p8, &p47} - p138.options = []parser{&p20, &p76} - var p82 = sequenceParser{id: 82, commit: 10, ranges: [][]int{{0, -1}, {0, 1}, {0, -1}, {1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}}} - var p106 = choiceParser{id: 106, commit: 74, name: "ws-no-nl"} - var p130 = sequenceParser{id: 130, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{106}} - var p48 = charParser{id: 48, chars: []rune{32}} - p130.items = []parser{&p48} - var p131 = sequenceParser{id: 131, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{106}} - var p65 = charParser{id: 65, chars: []rune{9}} - p131.items = []parser{&p65} - var p105 = sequenceParser{id: 105, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{106}} - var p151 = charParser{id: 151, chars: []rune{8}} - p105.items = []parser{&p151} - var p17 = sequenceParser{id: 17, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{106}} - var p90 = charParser{id: 90, chars: []rune{12}} - p17.items = []parser{&p90} - var p70 = sequenceParser{id: 70, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{106}} - var p177 = charParser{id: 177, chars: []rune{13}} - p70.items = []parser{&p177} - var p126 = sequenceParser{id: 126, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{106}} - var p45 = charParser{id: 45, chars: []rune{11}} - p126.items = []parser{&p45} - p106.options = []parser{&p130, &p131, &p105, &p17, &p70, &p126} - var p107 = sequenceParser{id: 107, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p46 = charParser{id: 46, chars: []rune{10}} - p107.items = []parser{&p46} - p82.items = []parser{&p106, &p107, &p106, &p138} - p18.items = []parser{&p138, &p82} - p185.options = []parser{&p38, &p18} + p76.items = []parser{&p18, &p57} + var p127 = sequenceParser{id: 127, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p100 = charParser{id: 100, not: true, chars: []rune{10}} + p127.items = []parser{&p100} + p77.items = []parser{&p76, &p127} + var p27 = sequenceParser{id: 27, commit: 74, name: "block-comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{175}} + var p12 = sequenceParser{id: 12, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var p148 = charParser{id: 148, chars: []rune{47}} + var p169 = charParser{id: 169, chars: []rune{42}} + p12.items = []parser{&p148, &p169} + var p34 = choiceParser{id: 34, commit: 10} + var p1 = sequenceParser{id: 1, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{34}} + var p170 = sequenceParser{id: 170, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p134 = charParser{id: 134, chars: []rune{42}} + p170.items = []parser{&p134} + var p179 = sequenceParser{id: 179, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p42 = charParser{id: 42, not: true, chars: []rune{47}} + p179.items = []parser{&p42} + p1.items = []parser{&p170, &p179} + var p174 = sequenceParser{id: 174, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{34}} + var p155 = charParser{id: 155, not: true, chars: []rune{42}} + p174.items = []parser{&p155} + p34.options = []parser{&p1, &p174} + var p117 = sequenceParser{id: 117, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var p163 = charParser{id: 163, chars: []rune{42}} + var p149 = charParser{id: 149, chars: []rune{47}} + p117.items = []parser{&p163, &p149} + p27.items = []parser{&p12, &p34, &p117} + p175.options = []parser{&p77, &p27} + var p176 = sequenceParser{id: 176, commit: 10, ranges: [][]int{{0, -1}, {0, 1}, {0, -1}, {1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}}} + var p47 = choiceParser{id: 47, commit: 74, name: "ws-no-nl"} + var p22 = sequenceParser{id: 22, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{47}} + var p19 = charParser{id: 19, chars: []rune{32}} + p22.items = []parser{&p19} + var p28 = sequenceParser{id: 28, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{47}} + var p81 = charParser{id: 81, chars: []rune{9}} + p28.items = []parser{&p81} + var p23 = sequenceParser{id: 23, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{47}} + var p90 = charParser{id: 90, chars: []rune{8}} + p23.items = []parser{&p90} + var p5 = sequenceParser{id: 5, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{47}} + var p68 = charParser{id: 68, chars: []rune{12}} + p5.items = []parser{&p68} + var p35 = sequenceParser{id: 35, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{47}} + var p6 = charParser{id: 6, chars: []rune{13}} + p35.items = []parser{&p6} + var p69 = sequenceParser{id: 69, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{47}} + var p61 = charParser{id: 61, chars: []rune{11}} + p69.items = []parser{&p61} + p47.options = []parser{&p22, &p28, &p23, &p5, &p35, &p69} + var p118 = sequenceParser{id: 118, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p58 = charParser{id: 58, chars: []rune{10}} + p118.items = []parser{&p58} + p176.items = []parser{&p47, &p118, &p47, &p175} + p101.items = []parser{&p175, &p176} + p185.options = []parser{&p56, &p101} p186.options = []parser{&p185} var p187 = sequenceParser{id: 187, commit: 66, name: "syntax:wsroot", ranges: [][]int{{0, 1}, {0, -1}, {0, 1}, {0, 1}}} - var p14 = sequenceParser{id: 14, commit: 2, ranges: [][]int{{1, 1}, {0, -1}}} - var p117 = sequenceParser{id: 117, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p139 = charParser{id: 139, chars: []rune{59}} - p117.items = []parser{&p139} - var p13 = sequenceParser{id: 13, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - p13.items = []parser{&p186, &p117} - p14.items = []parser{&p117, &p13} - var p159 = sequenceParser{id: 159, commit: 66, name: "definitions", ranges: [][]int{{1, 1}, {0, 1}}} - var p52 = sequenceParser{id: 52, commit: 64, name: "definition", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} - var p176 = sequenceParser{id: 176, commit: 74, name: "definition-name", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} - var p129 = sequenceParser{id: 129, commit: 72, name: "symbol", ranges: [][]int{{1, -1}, {1, -1}}, generalizations: []int{4, 40, 86}} - var p163 = sequenceParser{id: 163, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p22 = charParser{id: 22, not: true, chars: []rune{92, 32, 10, 9, 8, 12, 13, 11, 47, 46, 91, 93, 34, 123, 125, 94, 43, 42, 63, 124, 40, 41, 58, 61, 59}} - p163.items = []parser{&p22} - p129.items = []parser{&p163} - var p150 = sequenceParser{id: 150, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var p75 = sequenceParser{id: 75, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p30 = charParser{id: 30, chars: []rune{58}} - p75.items = []parser{&p30} - var p146 = choiceParser{id: 146, commit: 66, name: "flag"} - var p116 = sequenceParser{id: 116, commit: 72, name: "alias", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{146}} - var p69 = charParser{id: 69, chars: []rune{97}} - var p5 = charParser{id: 5, chars: []rune{108}} - var p127 = charParser{id: 127, chars: []rune{105}} - var p62 = charParser{id: 62, chars: []rune{97}} - var p97 = charParser{id: 97, chars: []rune{115}} - p116.items = []parser{&p69, &p5, &p127, &p62, &p97} - var p162 = sequenceParser{id: 162, commit: 72, name: "ws", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{146}} - var p43 = charParser{id: 43, chars: []rune{119}} - var p141 = charParser{id: 141, chars: []rune{115}} - p162.items = []parser{&p43, &p141} - var p145 = sequenceParser{id: 145, commit: 72, name: "nows", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{146}} - var p83 = charParser{id: 83, chars: []rune{110}} - var p98 = charParser{id: 98, chars: []rune{111}} - var p50 = charParser{id: 50, chars: []rune{119}} - var p74 = charParser{id: 74, chars: []rune{115}} - p145.items = []parser{&p83, &p98, &p50, &p74} - var p165 = sequenceParser{id: 165, commit: 72, name: "failpass", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{146}} - var p87 = charParser{id: 87, chars: []rune{102}} - var p29 = charParser{id: 29, chars: []rune{97}} - var p9 = charParser{id: 9, chars: []rune{105}} - var p51 = charParser{id: 51, chars: []rune{108}} - var p37 = charParser{id: 37, chars: []rune{112}} - var p104 = charParser{id: 104, chars: []rune{97}} - var p99 = charParser{id: 99, chars: []rune{115}} - var p154 = charParser{id: 154, chars: []rune{115}} - p165.items = []parser{&p87, &p29, &p9, &p51, &p37, &p104, &p99, &p154} - var p88 = sequenceParser{id: 88, commit: 72, name: "root", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{146}} - var p79 = charParser{id: 79, chars: []rune{114}} - var p135 = charParser{id: 135, chars: []rune{111}} - var p114 = charParser{id: 114, chars: []rune{111}} - var p181 = charParser{id: 181, chars: []rune{116}} - p88.items = []parser{&p79, &p135, &p114, &p181} - p146.options = []parser{&p116, &p162, &p145, &p165, &p88} - p150.items = []parser{&p75, &p146} - p176.items = []parser{&p129, &p150} - var p11 = sequenceParser{id: 11, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p80 = charParser{id: 80, chars: []rune{61}} - p11.items = []parser{&p80} - var p4 = choiceParser{id: 4, commit: 66, name: "expression"} - var p39 = choiceParser{id: 39, commit: 66, name: "terminal", generalizations: []int{4, 40, 86}} - var p183 = sequenceParser{id: 183, commit: 72, name: "any-char", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{39, 4, 40, 86}} - var p160 = charParser{id: 160, chars: []rune{46}} - p183.items = []parser{&p160} - var p184 = sequenceParser{id: 184, commit: 72, name: "char-class", ranges: [][]int{{1, 1}, {0, 1}, {0, -1}, {1, 1}, {1, 1}, {0, 1}, {0, -1}, {1, 1}}, generalizations: []int{39, 4, 40, 86}} - var p35 = sequenceParser{id: 35, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p153 = charParser{id: 153, chars: []rune{91}} - p35.items = []parser{&p153} - var p91 = sequenceParser{id: 91, commit: 72, name: "class-not", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p178 = charParser{id: 178, chars: []rune{94}} - p91.items = []parser{&p178} - var p84 = choiceParser{id: 84, commit: 10} - var p169 = choiceParser{id: 169, commit: 72, name: "class-char", generalizations: []int{84}} - var p144 = sequenceParser{id: 144, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{169, 84}} - var p21 = charParser{id: 21, not: true, chars: []rune{92, 91, 93, 94, 45}} - p144.items = []parser{&p21} - var p168 = sequenceParser{id: 168, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{169, 84}} - var p34 = sequenceParser{id: 34, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p167 = charParser{id: 167, chars: []rune{92}} - p34.items = []parser{&p167} - var p125 = sequenceParser{id: 125, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p19 = charParser{id: 19, not: true} - p125.items = []parser{&p19} - p168.items = []parser{&p34, &p125} - p169.options = []parser{&p144, &p168} - var p152 = sequenceParser{id: 152, commit: 72, name: "char-range", ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{84}} + var p87 = sequenceParser{id: 87, commit: 2, ranges: [][]int{{1, 1}, {0, -1}}} + var p142 = sequenceParser{id: 142, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p126 = charParser{id: 126, chars: []rune{59}} + p142.items = []parser{&p126} + var p86 = sequenceParser{id: 86, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + p86.items = []parser{&p186, &p142} + p87.items = []parser{&p142, &p86} + var p66 = sequenceParser{id: 66, commit: 66, name: "definitions", ranges: [][]int{{1, 1}, {0, 1}}} + var p73 = sequenceParser{id: 73, commit: 64, name: "definition", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} + var p154 = sequenceParser{id: 154, commit: 74, name: "definition-name", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} + var p49 = sequenceParser{id: 49, commit: 72, name: "symbol", ranges: [][]int{{1, -1}, {1, -1}}, generalizations: []int{26, 103, 63}} + var p2 = sequenceParser{id: 2, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p144 = charParser{id: 144, not: true, chars: []rune{92, 32, 10, 9, 8, 12, 13, 11, 47, 46, 91, 93, 34, 123, 125, 94, 43, 42, 63, 124, 40, 41, 58, 61, 59}} + p2.items = []parser{&p144} + p49.items = []parser{&p2} + var p46 = sequenceParser{id: 46, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var p172 = sequenceParser{id: 172, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p125 = charParser{id: 125, chars: []rune{58}} + p172.items = []parser{&p125} + var p4 = choiceParser{id: 4, commit: 66, name: "flag"} + var p44 = sequenceParser{id: 44, commit: 72, name: "alias", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{4}} + var p33 = charParser{id: 33, chars: []rune{97}} + var p75 = charParser{id: 75, chars: []rune{108}} + var p16 = charParser{id: 16, chars: []rune{105}} + var p51 = charParser{id: 51, chars: []rune{97}} + var p40 = charParser{id: 40, chars: []rune{115}} + p44.items = []parser{&p33, &p75, &p16, &p51, &p40} + var p45 = sequenceParser{id: 45, commit: 72, name: "ws", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{4}} + var p31 = charParser{id: 31, chars: []rune{119}} + var p120 = charParser{id: 120, chars: []rune{115}} + p45.items = []parser{&p31, &p120} + var p17 = sequenceParser{id: 17, commit: 72, name: "nows", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{4}} + var p97 = charParser{id: 97, chars: []rune{110}} + var p183 = charParser{id: 183, chars: []rune{111}} + var p93 = charParser{id: 93, chars: []rune{119}} + var p146 = charParser{id: 146, chars: []rune{115}} + p17.items = []parser{&p97, &p183, &p93, &p146} + var p160 = sequenceParser{id: 160, commit: 72, name: "failpass", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{4}} + var p79 = charParser{id: 79, chars: []rune{102}} + var p80 = charParser{id: 80, chars: []rune{97}} + var p111 = charParser{id: 111, chars: []rune{105}} + var p94 = charParser{id: 94, chars: []rune{108}} + var p132 = charParser{id: 132, chars: []rune{112}} + var p53 = charParser{id: 53, chars: []rune{97}} + var p72 = charParser{id: 72, chars: []rune{115}} + var p105 = charParser{id: 105, chars: []rune{115}} + p160.items = []parser{&p79, &p80, &p111, &p94, &p132, &p53, &p72, &p105} + var p20 = sequenceParser{id: 20, commit: 72, name: "root", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{4}} + var p147 = charParser{id: 147, chars: []rune{114}} + var p184 = charParser{id: 184, chars: []rune{111}} + var p153 = charParser{id: 153, chars: []rune{111}} + var p137 = charParser{id: 137, chars: []rune{116}} + p20.items = []parser{&p147, &p184, &p153, &p137} + p4.options = []parser{&p44, &p45, &p17, &p160, &p20} + p46.items = []parser{&p172, &p4} + p154.items = []parser{&p49, &p46} + var p152 = sequenceParser{id: 152, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p173 = charParser{id: 173, chars: []rune{61}} + p152.items = []parser{&p173} + var p26 = choiceParser{id: 26, commit: 66, name: "expression"} + var p129 = choiceParser{id: 129, commit: 66, name: "terminal", generalizations: []int{26, 103, 63}} + var p70 = sequenceParser{id: 70, commit: 72, name: "any-char", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{129, 26, 103, 63}} + var p91 = charParser{id: 91, chars: []rune{46}} + p70.items = []parser{&p91} + var p62 = sequenceParser{id: 62, commit: 72, name: "char-class", ranges: [][]int{{1, 1}, {0, 1}, {0, -1}, {1, 1}, {1, 1}, {0, 1}, {0, -1}, {1, 1}}, generalizations: []int{129, 26, 103, 63}} var p71 = sequenceParser{id: 71, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p41 = charParser{id: 41, chars: []rune{45}} - p71.items = []parser{&p41} - p152.items = []parser{&p169, &p71, &p169} - p84.options = []parser{&p169, &p152} - var p58 = sequenceParser{id: 58, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p36 = charParser{id: 36, chars: []rune{93}} - p58.items = []parser{&p36} - p184.items = []parser{&p35, &p91, &p84, &p58} - var p10 = sequenceParser{id: 10, commit: 72, name: "char-sequence", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{39, 4, 40, 86}} - var p120 = sequenceParser{id: 120, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p180 = charParser{id: 180, chars: []rune{34}} - p120.items = []parser{&p180} - var p171 = choiceParser{id: 171, commit: 72, name: "sequence-char"} - var p66 = sequenceParser{id: 66, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{171}} - var p108 = charParser{id: 108, not: true, chars: []rune{92, 34}} - p66.items = []parser{&p108} - var p113 = sequenceParser{id: 113, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{171}} - var p109 = sequenceParser{id: 109, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p119 = charParser{id: 119, chars: []rune{92}} - p109.items = []parser{&p119} - var p121 = sequenceParser{id: 121, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p1 = charParser{id: 1, not: true} - p121.items = []parser{&p1} - p113.items = []parser{&p109, &p121} - p171.options = []parser{&p66, &p113} + var p82 = charParser{id: 82, chars: []rune{91}} + p71.items = []parser{&p82} + var p180 = sequenceParser{id: 180, commit: 72, name: "class-not", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p29 = charParser{id: 29, chars: []rune{94}} + p180.items = []parser{&p29} + var p83 = choiceParser{id: 83, commit: 10} + var p171 = choiceParser{id: 171, commit: 72, name: "class-char", generalizations: []int{83}} + var p150 = sequenceParser{id: 150, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{171, 83}} + var p113 = charParser{id: 113, not: true, chars: []rune{92, 91, 93, 94, 45}} + p150.items = []parser{&p113} + var p164 = sequenceParser{id: 164, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{171, 83}} + var p59 = sequenceParser{id: 59, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p122 = charParser{id: 122, chars: []rune{92}} + p59.items = []parser{&p122} + var p106 = sequenceParser{id: 106, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p7 = charParser{id: 7, not: true} + p106.items = []parser{&p7} + p164.items = []parser{&p59, &p106} + p171.options = []parser{&p150, &p164} + var p177 = sequenceParser{id: 177, commit: 72, name: "char-range", ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{83}} var p78 = sequenceParser{id: 78, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p172 = charParser{id: 172, chars: []rune{34}} - p78.items = []parser{&p172} - p10.items = []parser{&p120, &p171, &p78} - p39.options = []parser{&p183, &p184, &p10} - var p23 = sequenceParser{id: 23, commit: 66, name: "group", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{4, 40, 86}} - var p31 = sequenceParser{id: 31, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p60 = charParser{id: 60, chars: []rune{40}} - p31.items = []parser{&p60} - var p72 = sequenceParser{id: 72, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p174 = charParser{id: 174, chars: []rune{41}} - p72.items = []parser{&p174} - p23.items = []parser{&p31, &p186, &p4, &p186, &p72} - var p68 = sequenceParser{id: 68, commit: 64, name: "sequence", ranges: [][]int{{1, 1}, {0, -1}}, generalizations: []int{4, 86}} - var p115 = sequenceParser{id: 115, commit: 72, name: "item", ranges: [][]int{{1, 1}, {0, 1}, {1, 1}, {0, 1}}} - var p40 = choiceParser{id: 40, commit: 10} - p40.options = []parser{&p39, &p129, &p23} - var p56 = choiceParser{id: 56, commit: 66, name: "quantity"} - var p24 = sequenceParser{id: 24, commit: 64, name: "count-quantifier", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{56}} - var p148 = sequenceParser{id: 148, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p55 = charParser{id: 55, chars: []rune{123}} - p148.items = []parser{&p55} - var p54 = sequenceParser{id: 54, commit: 64, name: "count", ranges: [][]int{{1, 1}}} - var p73 = sequenceParser{id: 73, commit: 74, name: "number", ranges: [][]int{{1, -1}, {1, -1}}} - var p164 = sequenceParser{id: 164, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p2 = charParser{id: 2, ranges: [][]rune{{48, 57}}} - p164.items = []parser{&p2} - p73.items = []parser{&p164} - p54.items = []parser{&p73} - var p140 = sequenceParser{id: 140, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p94 = charParser{id: 94, chars: []rune{125}} - p140.items = []parser{&p94} - p24.items = []parser{&p148, &p186, &p54, &p186, &p140} - var p42 = sequenceParser{id: 42, commit: 64, name: "range-quantifier", ranges: [][]int{{1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}}, generalizations: []int{56}} - var p102 = sequenceParser{id: 102, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p179 = charParser{id: 179, chars: []rune{123}} - p102.items = []parser{&p179} - var p59 = sequenceParser{id: 59, commit: 64, name: "range-from", ranges: [][]int{{1, 1}}} - p59.items = []parser{&p73} - var p28 = sequenceParser{id: 28, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p32 = charParser{id: 32, chars: []rune{44}} - p28.items = []parser{&p32} - var p61 = sequenceParser{id: 61, commit: 64, name: "range-to", ranges: [][]int{{1, 1}}} - p61.items = []parser{&p73} - var p33 = sequenceParser{id: 33, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p95 = charParser{id: 95, chars: []rune{125}} - p33.items = []parser{&p95} - p42.items = []parser{&p102, &p186, &p59, &p186, &p28, &p186, &p61, &p186, &p33} - var p132 = sequenceParser{id: 132, commit: 72, name: "one-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{56}} - var p122 = charParser{id: 122, chars: []rune{43}} - p132.items = []parser{&p122} - var p175 = sequenceParser{id: 175, commit: 72, name: "zero-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{56}} - var p92 = charParser{id: 92, chars: []rune{42}} - p175.items = []parser{&p92} - var p161 = sequenceParser{id: 161, commit: 72, name: "zero-or-one", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{56}} - var p85 = charParser{id: 85, chars: []rune{63}} - p161.items = []parser{&p85} - p56.options = []parser{&p24, &p42, &p132, &p175, &p161} - p115.items = []parser{&p40, &p56} - var p67 = sequenceParser{id: 67, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - p67.items = []parser{&p186, &p115} - p68.items = []parser{&p115, &p67} - var p134 = sequenceParser{id: 134, commit: 64, name: "choice", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}, generalizations: []int{4}} - var p86 = choiceParser{id: 86, commit: 66, name: "option"} - p86.options = []parser{&p39, &p129, &p23, &p68} - var p3 = sequenceParser{id: 3, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}}} - var p149 = sequenceParser{id: 149, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p96 = charParser{id: 96, chars: []rune{124}} - p149.items = []parser{&p96} - p3.items = []parser{&p149, &p186, &p86} - var p133 = sequenceParser{id: 133, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - p133.items = []parser{&p186, &p3} - p134.items = []parser{&p86, &p186, &p3, &p133} - p4.options = []parser{&p39, &p129, &p23, &p68, &p134} - p52.items = []parser{&p176, &p186, &p11, &p186, &p4} - var p158 = sequenceParser{id: 158, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} - var p156 = sequenceParser{id: 156, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {0, -1}, {1, 1}}} - var p53 = sequenceParser{id: 53, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p166 = charParser{id: 166, chars: []rune{59}} - p53.items = []parser{&p166} - var p155 = sequenceParser{id: 155, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - p155.items = []parser{&p186, &p53} - p156.items = []parser{&p53, &p155, &p186, &p52} - var p157 = sequenceParser{id: 157, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - p157.items = []parser{&p186, &p156} - p158.items = []parser{&p186, &p156, &p157} - p159.items = []parser{&p52, &p158} - var p16 = sequenceParser{id: 16, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} - var p12 = sequenceParser{id: 12, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p49 = charParser{id: 49, chars: []rune{59}} - p12.items = []parser{&p49} - var p15 = sequenceParser{id: 15, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - p15.items = []parser{&p186, &p12} - p16.items = []parser{&p186, &p12, &p15} - p187.items = []parser{&p14, &p186, &p159, &p16} + var p24 = charParser{id: 24, chars: []rune{45}} + p78.items = []parser{&p24} + p177.items = []parser{&p171, &p78, &p171} + p83.options = []parser{&p171, &p177} + var p84 = sequenceParser{id: 84, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p43 = charParser{id: 43, chars: []rune{93}} + p84.items = []parser{&p43} + p62.items = []parser{&p71, &p180, &p83, &p84} + var p36 = sequenceParser{id: 36, commit: 72, name: "char-sequence", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{129, 26, 103, 63}} + var p128 = sequenceParser{id: 128, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p157 = charParser{id: 157, chars: []rune{34}} + p128.items = []parser{&p157} + var p114 = choiceParser{id: 114, commit: 72, name: "sequence-char"} + var p143 = sequenceParser{id: 143, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{114}} + var p107 = charParser{id: 107, not: true, chars: []rune{92, 34}} + p143.items = []parser{&p107} + var p25 = sequenceParser{id: 25, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{114}} + var p48 = sequenceParser{id: 48, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p156 = charParser{id: 156, chars: []rune{92}} + p48.items = []parser{&p156} + var p8 = sequenceParser{id: 8, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p13 = charParser{id: 13, not: true} + p8.items = []parser{&p13} + p25.items = []parser{&p48, &p8} + p114.options = []parser{&p143, &p25} + var p115 = sequenceParser{id: 115, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p151 = charParser{id: 151, chars: []rune{34}} + p115.items = []parser{&p151} + p36.items = []parser{&p128, &p114, &p115} + p129.options = []parser{&p70, &p62, &p36} + var p165 = sequenceParser{id: 165, commit: 66, name: "group", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{26, 103, 63}} + var p104 = sequenceParser{id: 104, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p178 = charParser{id: 178, chars: []rune{40}} + p104.items = []parser{&p178} + var p135 = sequenceParser{id: 135, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p37 = charParser{id: 37, chars: []rune{41}} + p135.items = []parser{&p37} + p165.items = []parser{&p104, &p186, &p26, &p186, &p135} + var p11 = sequenceParser{id: 11, commit: 64, name: "sequence", ranges: [][]int{{1, 1}, {0, -1}}, generalizations: []int{26, 63}} + var p167 = sequenceParser{id: 167, commit: 72, name: "item", ranges: [][]int{{1, 1}, {0, 1}, {1, 1}, {0, 1}}} + var p103 = choiceParser{id: 103, commit: 10} + p103.options = []parser{&p129, &p49, &p165} + var p123 = choiceParser{id: 123, commit: 66, name: "quantity"} + var p116 = sequenceParser{id: 116, commit: 64, name: "count-quantifier", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{123}} + var p136 = sequenceParser{id: 136, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p130 = charParser{id: 130, chars: []rune{123}} + p136.items = []parser{&p130} + var p14 = sequenceParser{id: 14, commit: 64, name: "count", ranges: [][]int{{1, 1}}} + var p109 = sequenceParser{id: 109, commit: 74, name: "number", ranges: [][]int{{1, -1}, {1, -1}}} + var p158 = sequenceParser{id: 158, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p108 = charParser{id: 108, ranges: [][]rune{{48, 57}}} + p158.items = []parser{&p108} + p109.items = []parser{&p158} + p14.items = []parser{&p109} + var p30 = sequenceParser{id: 30, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p38 = charParser{id: 38, chars: []rune{125}} + p30.items = []parser{&p38} + p116.items = []parser{&p136, &p186, &p14, &p186, &p30} + var p3 = sequenceParser{id: 3, commit: 64, name: "range-quantifier", ranges: [][]int{{1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}}, generalizations: []int{123}} + var p32 = sequenceParser{id: 32, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p39 = charParser{id: 39, chars: []rune{123}} + p32.items = []parser{&p39} + var p159 = sequenceParser{id: 159, commit: 64, name: "range-from", ranges: [][]int{{1, 1}}} + p159.items = []parser{&p109} + var p92 = sequenceParser{id: 92, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p102 = charParser{id: 102, chars: []rune{44}} + p92.items = []parser{&p102} + var p9 = sequenceParser{id: 9, commit: 64, name: "range-to", ranges: [][]int{{1, 1}}} + p9.items = []parser{&p109} + var p119 = sequenceParser{id: 119, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p15 = charParser{id: 15, chars: []rune{125}} + p119.items = []parser{&p15} + p3.items = []parser{&p32, &p186, &p159, &p186, &p92, &p186, &p9, &p186, &p119} + var p50 = sequenceParser{id: 50, commit: 72, name: "one-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{123}} + var p166 = charParser{id: 166, chars: []rune{43}} + p50.items = []parser{&p166} + var p145 = sequenceParser{id: 145, commit: 72, name: "zero-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{123}} + var p131 = charParser{id: 131, chars: []rune{42}} + p145.items = []parser{&p131} + var p85 = sequenceParser{id: 85, commit: 72, name: "zero-or-one", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{123}} + var p74 = charParser{id: 74, chars: []rune{63}} + p85.items = []parser{&p74} + p123.options = []parser{&p116, &p3, &p50, &p145, &p85} + p167.items = []parser{&p103, &p123} + var p10 = sequenceParser{id: 10, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + p10.items = []parser{&p186, &p167} + p11.items = []parser{&p167, &p10} + var p182 = sequenceParser{id: 182, commit: 64, name: "choice", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}, generalizations: []int{26}} + var p63 = choiceParser{id: 63, commit: 66, name: "option"} + p63.options = []parser{&p129, &p49, &p165, &p11} + var p52 = sequenceParser{id: 52, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}}} + var p110 = sequenceParser{id: 110, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p124 = charParser{id: 124, chars: []rune{124}} + p110.items = []parser{&p124} + p52.items = []parser{&p110, &p186, &p63} + var p181 = sequenceParser{id: 181, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + p181.items = []parser{&p186, &p52} + p182.items = []parser{&p63, &p186, &p52, &p181} + p26.options = []parser{&p129, &p49, &p165, &p11, &p182} + p73.items = []parser{&p154, &p186, &p152, &p186, &p26} + var p65 = sequenceParser{id: 65, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} + var p96 = sequenceParser{id: 96, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {0, -1}, {1, 1}}} + var p67 = sequenceParser{id: 67, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p60 = charParser{id: 60, chars: []rune{59}} + p67.items = []parser{&p60} + var p95 = sequenceParser{id: 95, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + p95.items = []parser{&p186, &p67} + p96.items = []parser{&p67, &p95, &p186, &p73} + var p64 = sequenceParser{id: 64, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + p64.items = []parser{&p186, &p96} + p65.items = []parser{&p186, &p96, &p64} + p66.items = []parser{&p73, &p65} + var p89 = sequenceParser{id: 89, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} + var p161 = sequenceParser{id: 161, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p41 = charParser{id: 41, chars: []rune{59}} + p161.items = []parser{&p41} + var p88 = sequenceParser{id: 88, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + p88.items = []parser{&p186, &p161} + p89.items = []parser{&p186, &p161, &p88} + p187.items = []parser{&p87, &p186, &p66, &p89} p188.items = []parser{&p186, &p187, &p186} var b188 = sequenceBuilder{id: 188, commit: 32, name: "syntax", ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} var b186 = choiceBuilder{id: 186, commit: 2} var b185 = choiceBuilder{id: 185, commit: 70} - var b38 = choiceBuilder{id: 38, commit: 66} - var b25 = sequenceBuilder{id: 25, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b6 = charBuilder{} - b25.items = []builder{&b6} - var b26 = sequenceBuilder{id: 26, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b110 = charBuilder{} - b26.items = []builder{&b110} - var b111 = sequenceBuilder{id: 111, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b100 = charBuilder{} - b111.items = []builder{&b100} - var b136 = sequenceBuilder{id: 136, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b142 = charBuilder{} - b136.items = []builder{&b142} - var b101 = sequenceBuilder{id: 101, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b7 = charBuilder{} - b101.items = []builder{&b7} - var b147 = sequenceBuilder{id: 147, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b170 = charBuilder{} - b147.items = []builder{&b170} - var b63 = sequenceBuilder{id: 63, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b44 = charBuilder{} - b63.items = []builder{&b44} - b38.options = []builder{&b25, &b26, &b111, &b136, &b101, &b147, &b63} - var b18 = sequenceBuilder{id: 18, commit: 72, name: "comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} - var b138 = choiceBuilder{id: 138, commit: 74} - var b20 = sequenceBuilder{id: 20, commit: 74, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} - var b124 = sequenceBuilder{id: 124, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b182 = charBuilder{} - var b143 = charBuilder{} - b124.items = []builder{&b182, &b143} - var b128 = sequenceBuilder{id: 128, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b77 = charBuilder{} - b128.items = []builder{&b77} - b20.items = []builder{&b124, &b128} - var b76 = sequenceBuilder{id: 76, commit: 74, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}} - var b103 = sequenceBuilder{id: 103, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b123 = charBuilder{} - var b93 = charBuilder{} - b103.items = []builder{&b123, &b93} - var b8 = choiceBuilder{id: 8, commit: 10} - var b81 = sequenceBuilder{id: 81, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b27 = sequenceBuilder{id: 27, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b112 = charBuilder{} - b27.items = []builder{&b112} - var b173 = sequenceBuilder{id: 173, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b64 = charBuilder{} - b173.items = []builder{&b64} - b81.items = []builder{&b27, &b173} - var b89 = sequenceBuilder{id: 89, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b118 = charBuilder{} - b89.items = []builder{&b118} - b8.options = []builder{&b81, &b89} - var b47 = sequenceBuilder{id: 47, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b137 = charBuilder{} + var b56 = choiceBuilder{id: 56, commit: 66} + var b162 = sequenceBuilder{id: 162, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b138 = charBuilder{} + b162.items = []builder{&b138} + var b140 = sequenceBuilder{id: 140, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b139 = charBuilder{} + b140.items = []builder{&b139} + var b112 = sequenceBuilder{id: 112, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b141 = charBuilder{} + b112.items = []builder{&b141} + var b54 = sequenceBuilder{id: 54, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b133 = charBuilder{} + b54.items = []builder{&b133} + var b99 = sequenceBuilder{id: 99, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b98 = charBuilder{} + b99.items = []builder{&b98} + var b121 = sequenceBuilder{id: 121, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b21 = charBuilder{} + b121.items = []builder{&b21} + var b168 = sequenceBuilder{id: 168, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b55 = charBuilder{} + b168.items = []builder{&b55} + b56.options = []builder{&b162, &b140, &b112, &b54, &b99, &b121, &b168} + var b101 = sequenceBuilder{id: 101, commit: 72, name: "comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} + var b175 = choiceBuilder{id: 175, commit: 74} + var b77 = sequenceBuilder{id: 77, commit: 74, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} + var b76 = sequenceBuilder{id: 76, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b18 = charBuilder{} var b57 = charBuilder{} - b47.items = []builder{&b137, &b57} - b76.items = []builder{&b103, &b8, &b47} - b138.options = []builder{&b20, &b76} - var b82 = sequenceBuilder{id: 82, commit: 10, ranges: [][]int{{0, -1}, {0, 1}, {0, -1}, {1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}}} - var b106 = choiceBuilder{id: 106, commit: 74} - var b130 = sequenceBuilder{id: 130, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b48 = charBuilder{} - b130.items = []builder{&b48} - var b131 = sequenceBuilder{id: 131, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b65 = charBuilder{} - b131.items = []builder{&b65} - var b105 = sequenceBuilder{id: 105, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b151 = charBuilder{} - b105.items = []builder{&b151} - var b17 = sequenceBuilder{id: 17, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + b76.items = []builder{&b18, &b57} + var b127 = sequenceBuilder{id: 127, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b100 = charBuilder{} + b127.items = []builder{&b100} + b77.items = []builder{&b76, &b127} + var b27 = sequenceBuilder{id: 27, commit: 74, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}} + var b12 = sequenceBuilder{id: 12, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b148 = charBuilder{} + var b169 = charBuilder{} + b12.items = []builder{&b148, &b169} + var b34 = choiceBuilder{id: 34, commit: 10} + var b1 = sequenceBuilder{id: 1, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b170 = sequenceBuilder{id: 170, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b134 = charBuilder{} + b170.items = []builder{&b134} + var b179 = sequenceBuilder{id: 179, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b42 = charBuilder{} + b179.items = []builder{&b42} + b1.items = []builder{&b170, &b179} + var b174 = sequenceBuilder{id: 174, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b155 = charBuilder{} + b174.items = []builder{&b155} + b34.options = []builder{&b1, &b174} + var b117 = sequenceBuilder{id: 117, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b163 = charBuilder{} + var b149 = charBuilder{} + b117.items = []builder{&b163, &b149} + b27.items = []builder{&b12, &b34, &b117} + b175.options = []builder{&b77, &b27} + var b176 = sequenceBuilder{id: 176, commit: 10, ranges: [][]int{{0, -1}, {0, 1}, {0, -1}, {1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}}} + var b47 = choiceBuilder{id: 47, commit: 74} + var b22 = sequenceBuilder{id: 22, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b19 = charBuilder{} + b22.items = []builder{&b19} + var b28 = sequenceBuilder{id: 28, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b81 = charBuilder{} + b28.items = []builder{&b81} + var b23 = sequenceBuilder{id: 23, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} var b90 = charBuilder{} - b17.items = []builder{&b90} - var b70 = sequenceBuilder{id: 70, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b177 = charBuilder{} - b70.items = []builder{&b177} - var b126 = sequenceBuilder{id: 126, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b45 = charBuilder{} - b126.items = []builder{&b45} - b106.options = []builder{&b130, &b131, &b105, &b17, &b70, &b126} - var b107 = sequenceBuilder{id: 107, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b46 = charBuilder{} - b107.items = []builder{&b46} - b82.items = []builder{&b106, &b107, &b106, &b138} - b18.items = []builder{&b138, &b82} - b185.options = []builder{&b38, &b18} + b23.items = []builder{&b90} + var b5 = sequenceBuilder{id: 5, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b68 = charBuilder{} + b5.items = []builder{&b68} + var b35 = sequenceBuilder{id: 35, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b6 = charBuilder{} + b35.items = []builder{&b6} + var b69 = sequenceBuilder{id: 69, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b61 = charBuilder{} + b69.items = []builder{&b61} + b47.options = []builder{&b22, &b28, &b23, &b5, &b35, &b69} + var b118 = sequenceBuilder{id: 118, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b58 = charBuilder{} + b118.items = []builder{&b58} + b176.items = []builder{&b47, &b118, &b47, &b175} + b101.items = []builder{&b175, &b176} + b185.options = []builder{&b56, &b101} b186.options = []builder{&b185} var b187 = sequenceBuilder{id: 187, commit: 66, ranges: [][]int{{0, 1}, {0, -1}, {0, 1}, {0, 1}}} - var b14 = sequenceBuilder{id: 14, commit: 2, ranges: [][]int{{1, 1}, {0, -1}}} - var b117 = sequenceBuilder{id: 117, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b139 = charBuilder{} - b117.items = []builder{&b139} - var b13 = sequenceBuilder{id: 13, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - b13.items = []builder{&b186, &b117} - b14.items = []builder{&b117, &b13} - var b159 = sequenceBuilder{id: 159, commit: 66, ranges: [][]int{{1, 1}, {0, 1}}} - var b52 = sequenceBuilder{id: 52, commit: 64, name: "definition", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} - var b176 = sequenceBuilder{id: 176, commit: 74, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} - var b129 = sequenceBuilder{id: 129, commit: 72, name: "symbol", ranges: [][]int{{1, -1}, {1, -1}}} - var b163 = sequenceBuilder{id: 163, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b22 = charBuilder{} - b163.items = []builder{&b22} - b129.items = []builder{&b163} - var b150 = sequenceBuilder{id: 150, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b75 = sequenceBuilder{id: 75, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b30 = charBuilder{} - b75.items = []builder{&b30} - var b146 = choiceBuilder{id: 146, commit: 66} - var b116 = sequenceBuilder{id: 116, commit: 72, name: "alias", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b69 = charBuilder{} - var b5 = charBuilder{} - var b127 = charBuilder{} - var b62 = charBuilder{} - var b97 = charBuilder{} - b116.items = []builder{&b69, &b5, &b127, &b62, &b97} - var b162 = sequenceBuilder{id: 162, commit: 72, name: "ws", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b43 = charBuilder{} - var b141 = charBuilder{} - b162.items = []builder{&b43, &b141} - var b145 = sequenceBuilder{id: 145, commit: 72, name: "nows", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b83 = charBuilder{} - var b98 = charBuilder{} - var b50 = charBuilder{} - var b74 = charBuilder{} - b145.items = []builder{&b83, &b98, &b50, &b74} - var b165 = sequenceBuilder{id: 165, commit: 72, name: "failpass", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b87 = charBuilder{} - var b29 = charBuilder{} - var b9 = charBuilder{} - var b51 = charBuilder{} - var b37 = charBuilder{} - var b104 = charBuilder{} - var b99 = charBuilder{} - var b154 = charBuilder{} - b165.items = []builder{&b87, &b29, &b9, &b51, &b37, &b104, &b99, &b154} - var b88 = sequenceBuilder{id: 88, commit: 72, name: "root", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b79 = charBuilder{} - var b135 = charBuilder{} - var b114 = charBuilder{} - var b181 = charBuilder{} - b88.items = []builder{&b79, &b135, &b114, &b181} - b146.options = []builder{&b116, &b162, &b145, &b165, &b88} - b150.items = []builder{&b75, &b146} - b176.items = []builder{&b129, &b150} - var b11 = sequenceBuilder{id: 11, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b80 = charBuilder{} - b11.items = []builder{&b80} + var b87 = sequenceBuilder{id: 87, commit: 2, ranges: [][]int{{1, 1}, {0, -1}}} + var b142 = sequenceBuilder{id: 142, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b126 = charBuilder{} + b142.items = []builder{&b126} + var b86 = sequenceBuilder{id: 86, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + b86.items = []builder{&b186, &b142} + b87.items = []builder{&b142, &b86} + var b66 = sequenceBuilder{id: 66, commit: 66, ranges: [][]int{{1, 1}, {0, 1}}} + var b73 = sequenceBuilder{id: 73, commit: 64, name: "definition", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} + var b154 = sequenceBuilder{id: 154, commit: 74, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} + var b49 = sequenceBuilder{id: 49, commit: 72, name: "symbol", ranges: [][]int{{1, -1}, {1, -1}}} + var b2 = sequenceBuilder{id: 2, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b144 = charBuilder{} + b2.items = []builder{&b144} + b49.items = []builder{&b2} + var b46 = sequenceBuilder{id: 46, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b172 = sequenceBuilder{id: 172, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b125 = charBuilder{} + b172.items = []builder{&b125} var b4 = choiceBuilder{id: 4, commit: 66} - var b39 = choiceBuilder{id: 39, commit: 66} - var b183 = sequenceBuilder{id: 183, commit: 72, name: "any-char", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b160 = charBuilder{} - b183.items = []builder{&b160} - var b184 = sequenceBuilder{id: 184, commit: 72, name: "char-class", ranges: [][]int{{1, 1}, {0, 1}, {0, -1}, {1, 1}, {1, 1}, {0, 1}, {0, -1}, {1, 1}}} - var b35 = sequenceBuilder{id: 35, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b153 = charBuilder{} - b35.items = []builder{&b153} - var b91 = sequenceBuilder{id: 91, commit: 72, name: "class-not", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b178 = charBuilder{} - b91.items = []builder{&b178} - var b84 = choiceBuilder{id: 84, commit: 10} - var b169 = choiceBuilder{id: 169, commit: 72, name: "class-char"} - var b144 = sequenceBuilder{id: 144, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b21 = charBuilder{} - b144.items = []builder{&b21} - var b168 = sequenceBuilder{id: 168, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b34 = sequenceBuilder{id: 34, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b167 = charBuilder{} - b34.items = []builder{&b167} - var b125 = sequenceBuilder{id: 125, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b19 = charBuilder{} - b125.items = []builder{&b19} - b168.items = []builder{&b34, &b125} - b169.options = []builder{&b144, &b168} - var b152 = sequenceBuilder{id: 152, commit: 72, name: "char-range", ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b71 = sequenceBuilder{id: 71, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b41 = charBuilder{} - b71.items = []builder{&b41} - b152.items = []builder{&b169, &b71, &b169} - b84.options = []builder{&b169, &b152} - var b58 = sequenceBuilder{id: 58, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b36 = charBuilder{} - b58.items = []builder{&b36} - b184.items = []builder{&b35, &b91, &b84, &b58} - var b10 = sequenceBuilder{id: 10, commit: 72, name: "char-sequence", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}} - var b120 = sequenceBuilder{id: 120, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b180 = charBuilder{} - b120.items = []builder{&b180} - var b171 = choiceBuilder{id: 171, commit: 72, name: "sequence-char"} - var b66 = sequenceBuilder{id: 66, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b108 = charBuilder{} - b66.items = []builder{&b108} - var b113 = sequenceBuilder{id: 113, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b109 = sequenceBuilder{id: 109, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b119 = charBuilder{} - b109.items = []builder{&b119} - var b121 = sequenceBuilder{id: 121, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b1 = charBuilder{} - b121.items = []builder{&b1} - b113.items = []builder{&b109, &b121} - b171.options = []builder{&b66, &b113} - var b78 = sequenceBuilder{id: 78, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b172 = charBuilder{} - b78.items = []builder{&b172} - b10.items = []builder{&b120, &b171, &b78} - b39.options = []builder{&b183, &b184, &b10} - var b23 = sequenceBuilder{id: 23, commit: 66, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} - var b31 = sequenceBuilder{id: 31, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b60 = charBuilder{} - b31.items = []builder{&b60} - var b72 = sequenceBuilder{id: 72, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b174 = charBuilder{} - b72.items = []builder{&b174} - b23.items = []builder{&b31, &b186, &b4, &b186, &b72} - var b68 = sequenceBuilder{id: 68, commit: 64, name: "sequence", ranges: [][]int{{1, 1}, {0, -1}}} - var b115 = sequenceBuilder{id: 115, commit: 72, name: "item", ranges: [][]int{{1, 1}, {0, 1}, {1, 1}, {0, 1}}} - var b40 = choiceBuilder{id: 40, commit: 10} - b40.options = []builder{&b39, &b129, &b23} - var b56 = choiceBuilder{id: 56, commit: 66} - var b24 = sequenceBuilder{id: 24, commit: 64, name: "count-quantifier", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} - var b148 = sequenceBuilder{id: 148, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b55 = charBuilder{} - b148.items = []builder{&b55} - var b54 = sequenceBuilder{id: 54, commit: 64, name: "count", ranges: [][]int{{1, 1}}} - var b73 = sequenceBuilder{id: 73, commit: 74, ranges: [][]int{{1, -1}, {1, -1}}} - var b164 = sequenceBuilder{id: 164, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b2 = charBuilder{} - b164.items = []builder{&b2} - b73.items = []builder{&b164} - b54.items = []builder{&b73} - var b140 = sequenceBuilder{id: 140, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b44 = sequenceBuilder{id: 44, commit: 72, name: "alias", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b33 = charBuilder{} + var b75 = charBuilder{} + var b16 = charBuilder{} + var b51 = charBuilder{} + var b40 = charBuilder{} + b44.items = []builder{&b33, &b75, &b16, &b51, &b40} + var b45 = sequenceBuilder{id: 45, commit: 72, name: "ws", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b31 = charBuilder{} + var b120 = charBuilder{} + b45.items = []builder{&b31, &b120} + var b17 = sequenceBuilder{id: 17, commit: 72, name: "nows", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b97 = charBuilder{} + var b183 = charBuilder{} + var b93 = charBuilder{} + var b146 = charBuilder{} + b17.items = []builder{&b97, &b183, &b93, &b146} + var b160 = sequenceBuilder{id: 160, commit: 72, name: "failpass", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b79 = charBuilder{} + var b80 = charBuilder{} + var b111 = charBuilder{} var b94 = charBuilder{} - b140.items = []builder{&b94} - b24.items = []builder{&b148, &b186, &b54, &b186, &b140} - var b42 = sequenceBuilder{id: 42, commit: 64, name: "range-quantifier", ranges: [][]int{{1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}}} - var b102 = sequenceBuilder{id: 102, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b179 = charBuilder{} - b102.items = []builder{&b179} - var b59 = sequenceBuilder{id: 59, commit: 64, name: "range-from", ranges: [][]int{{1, 1}}} - b59.items = []builder{&b73} - var b28 = sequenceBuilder{id: 28, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b32 = charBuilder{} - b28.items = []builder{&b32} - var b61 = sequenceBuilder{id: 61, commit: 64, name: "range-to", ranges: [][]int{{1, 1}}} - b61.items = []builder{&b73} - var b33 = sequenceBuilder{id: 33, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b95 = charBuilder{} - b33.items = []builder{&b95} - b42.items = []builder{&b102, &b186, &b59, &b186, &b28, &b186, &b61, &b186, &b33} - var b132 = sequenceBuilder{id: 132, commit: 72, name: "one-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b132 = charBuilder{} + var b53 = charBuilder{} + var b72 = charBuilder{} + var b105 = charBuilder{} + b160.items = []builder{&b79, &b80, &b111, &b94, &b132, &b53, &b72, &b105} + var b20 = sequenceBuilder{id: 20, commit: 72, name: "root", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b147 = charBuilder{} + var b184 = charBuilder{} + var b153 = charBuilder{} + var b137 = charBuilder{} + b20.items = []builder{&b147, &b184, &b153, &b137} + b4.options = []builder{&b44, &b45, &b17, &b160, &b20} + b46.items = []builder{&b172, &b4} + b154.items = []builder{&b49, &b46} + var b152 = sequenceBuilder{id: 152, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b173 = charBuilder{} + b152.items = []builder{&b173} + var b26 = choiceBuilder{id: 26, commit: 66} + var b129 = choiceBuilder{id: 129, commit: 66} + var b70 = sequenceBuilder{id: 70, commit: 72, name: "any-char", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b91 = charBuilder{} + b70.items = []builder{&b91} + var b62 = sequenceBuilder{id: 62, commit: 72, name: "char-class", ranges: [][]int{{1, 1}, {0, 1}, {0, -1}, {1, 1}, {1, 1}, {0, 1}, {0, -1}, {1, 1}}} + var b71 = sequenceBuilder{id: 71, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b82 = charBuilder{} + b71.items = []builder{&b82} + var b180 = sequenceBuilder{id: 180, commit: 72, name: "class-not", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b29 = charBuilder{} + b180.items = []builder{&b29} + var b83 = choiceBuilder{id: 83, commit: 10} + var b171 = choiceBuilder{id: 171, commit: 72, name: "class-char"} + var b150 = sequenceBuilder{id: 150, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b113 = charBuilder{} + b150.items = []builder{&b113} + var b164 = sequenceBuilder{id: 164, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b59 = sequenceBuilder{id: 59, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} var b122 = charBuilder{} - b132.items = []builder{&b122} - var b175 = sequenceBuilder{id: 175, commit: 72, name: "zero-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b92 = charBuilder{} - b175.items = []builder{&b92} - var b161 = sequenceBuilder{id: 161, commit: 72, name: "zero-or-one", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b85 = charBuilder{} - b161.items = []builder{&b85} - b56.options = []builder{&b24, &b42, &b132, &b175, &b161} - b115.items = []builder{&b40, &b56} - var b67 = sequenceBuilder{id: 67, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - b67.items = []builder{&b186, &b115} - b68.items = []builder{&b115, &b67} - var b134 = sequenceBuilder{id: 134, commit: 64, name: "choice", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} - var b86 = choiceBuilder{id: 86, commit: 66} - b86.options = []builder{&b39, &b129, &b23, &b68} - var b3 = sequenceBuilder{id: 3, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}}} - var b149 = sequenceBuilder{id: 149, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b96 = charBuilder{} - b149.items = []builder{&b96} - b3.items = []builder{&b149, &b186, &b86} - var b133 = sequenceBuilder{id: 133, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - b133.items = []builder{&b186, &b3} - b134.items = []builder{&b86, &b186, &b3, &b133} - b4.options = []builder{&b39, &b129, &b23, &b68, &b134} - b52.items = []builder{&b176, &b186, &b11, &b186, &b4} - var b158 = sequenceBuilder{id: 158, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} - var b156 = sequenceBuilder{id: 156, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {0, -1}, {1, 1}}} - var b53 = sequenceBuilder{id: 53, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + b59.items = []builder{&b122} + var b106 = sequenceBuilder{id: 106, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b7 = charBuilder{} + b106.items = []builder{&b7} + b164.items = []builder{&b59, &b106} + b171.options = []builder{&b150, &b164} + var b177 = sequenceBuilder{id: 177, commit: 72, name: "char-range", ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b78 = sequenceBuilder{id: 78, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b24 = charBuilder{} + b78.items = []builder{&b24} + b177.items = []builder{&b171, &b78, &b171} + b83.options = []builder{&b171, &b177} + var b84 = sequenceBuilder{id: 84, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b43 = charBuilder{} + b84.items = []builder{&b43} + b62.items = []builder{&b71, &b180, &b83, &b84} + var b36 = sequenceBuilder{id: 36, commit: 72, name: "char-sequence", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}} + var b128 = sequenceBuilder{id: 128, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b157 = charBuilder{} + b128.items = []builder{&b157} + var b114 = choiceBuilder{id: 114, commit: 72, name: "sequence-char"} + var b143 = sequenceBuilder{id: 143, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b107 = charBuilder{} + b143.items = []builder{&b107} + var b25 = sequenceBuilder{id: 25, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b48 = sequenceBuilder{id: 48, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b156 = charBuilder{} + b48.items = []builder{&b156} + var b8 = sequenceBuilder{id: 8, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b13 = charBuilder{} + b8.items = []builder{&b13} + b25.items = []builder{&b48, &b8} + b114.options = []builder{&b143, &b25} + var b115 = sequenceBuilder{id: 115, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b151 = charBuilder{} + b115.items = []builder{&b151} + b36.items = []builder{&b128, &b114, &b115} + b129.options = []builder{&b70, &b62, &b36} + var b165 = sequenceBuilder{id: 165, commit: 66, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} + var b104 = sequenceBuilder{id: 104, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b178 = charBuilder{} + b104.items = []builder{&b178} + var b135 = sequenceBuilder{id: 135, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b37 = charBuilder{} + b135.items = []builder{&b37} + b165.items = []builder{&b104, &b186, &b26, &b186, &b135} + var b11 = sequenceBuilder{id: 11, commit: 64, name: "sequence", ranges: [][]int{{1, 1}, {0, -1}}} + var b167 = sequenceBuilder{id: 167, commit: 72, name: "item", ranges: [][]int{{1, 1}, {0, 1}, {1, 1}, {0, 1}}} + var b103 = choiceBuilder{id: 103, commit: 10} + b103.options = []builder{&b129, &b49, &b165} + var b123 = choiceBuilder{id: 123, commit: 66} + var b116 = sequenceBuilder{id: 116, commit: 64, name: "count-quantifier", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} + var b136 = sequenceBuilder{id: 136, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b130 = charBuilder{} + b136.items = []builder{&b130} + var b14 = sequenceBuilder{id: 14, commit: 64, name: "count", ranges: [][]int{{1, 1}}} + var b109 = sequenceBuilder{id: 109, commit: 74, ranges: [][]int{{1, -1}, {1, -1}}} + var b158 = sequenceBuilder{id: 158, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b108 = charBuilder{} + b158.items = []builder{&b108} + b109.items = []builder{&b158} + b14.items = []builder{&b109} + var b30 = sequenceBuilder{id: 30, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b38 = charBuilder{} + b30.items = []builder{&b38} + b116.items = []builder{&b136, &b186, &b14, &b186, &b30} + var b3 = sequenceBuilder{id: 3, commit: 64, name: "range-quantifier", ranges: [][]int{{1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}}} + var b32 = sequenceBuilder{id: 32, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b39 = charBuilder{} + b32.items = []builder{&b39} + var b159 = sequenceBuilder{id: 159, commit: 64, name: "range-from", ranges: [][]int{{1, 1}}} + b159.items = []builder{&b109} + var b92 = sequenceBuilder{id: 92, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b102 = charBuilder{} + b92.items = []builder{&b102} + var b9 = sequenceBuilder{id: 9, commit: 64, name: "range-to", ranges: [][]int{{1, 1}}} + b9.items = []builder{&b109} + var b119 = sequenceBuilder{id: 119, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b15 = charBuilder{} + b119.items = []builder{&b15} + b3.items = []builder{&b32, &b186, &b159, &b186, &b92, &b186, &b9, &b186, &b119} + var b50 = sequenceBuilder{id: 50, commit: 72, name: "one-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} var b166 = charBuilder{} - b53.items = []builder{&b166} - var b155 = sequenceBuilder{id: 155, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - b155.items = []builder{&b186, &b53} - b156.items = []builder{&b53, &b155, &b186, &b52} - var b157 = sequenceBuilder{id: 157, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - b157.items = []builder{&b186, &b156} - b158.items = []builder{&b186, &b156, &b157} - b159.items = []builder{&b52, &b158} - var b16 = sequenceBuilder{id: 16, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} - var b12 = sequenceBuilder{id: 12, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b49 = charBuilder{} - b12.items = []builder{&b49} - var b15 = sequenceBuilder{id: 15, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - b15.items = []builder{&b186, &b12} - b16.items = []builder{&b186, &b12, &b15} - b187.items = []builder{&b14, &b186, &b159, &b16} + b50.items = []builder{&b166} + var b145 = sequenceBuilder{id: 145, commit: 72, name: "zero-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b131 = charBuilder{} + b145.items = []builder{&b131} + var b85 = sequenceBuilder{id: 85, commit: 72, name: "zero-or-one", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b74 = charBuilder{} + b85.items = []builder{&b74} + b123.options = []builder{&b116, &b3, &b50, &b145, &b85} + b167.items = []builder{&b103, &b123} + var b10 = sequenceBuilder{id: 10, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + b10.items = []builder{&b186, &b167} + b11.items = []builder{&b167, &b10} + var b182 = sequenceBuilder{id: 182, commit: 64, name: "choice", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} + var b63 = choiceBuilder{id: 63, commit: 66} + b63.options = []builder{&b129, &b49, &b165, &b11} + var b52 = sequenceBuilder{id: 52, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}}} + var b110 = sequenceBuilder{id: 110, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b124 = charBuilder{} + b110.items = []builder{&b124} + b52.items = []builder{&b110, &b186, &b63} + var b181 = sequenceBuilder{id: 181, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + b181.items = []builder{&b186, &b52} + b182.items = []builder{&b63, &b186, &b52, &b181} + b26.options = []builder{&b129, &b49, &b165, &b11, &b182} + b73.items = []builder{&b154, &b186, &b152, &b186, &b26} + var b65 = sequenceBuilder{id: 65, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} + var b96 = sequenceBuilder{id: 96, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {0, -1}, {1, 1}}} + var b67 = sequenceBuilder{id: 67, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b60 = charBuilder{} + b67.items = []builder{&b60} + var b95 = sequenceBuilder{id: 95, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + b95.items = []builder{&b186, &b67} + b96.items = []builder{&b67, &b95, &b186, &b73} + var b64 = sequenceBuilder{id: 64, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + b64.items = []builder{&b186, &b96} + b65.items = []builder{&b186, &b96, &b64} + b66.items = []builder{&b73, &b65} + var b89 = sequenceBuilder{id: 89, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} + var b161 = sequenceBuilder{id: 161, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b41 = charBuilder{} + b161.items = []builder{&b41} + var b88 = sequenceBuilder{id: 88, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + b88.items = []builder{&b186, &b161} + b89.items = []builder{&b186, &b161, &b88} + b187.items = []builder{&b87, &b186, &b66, &b89} b188.items = []builder{&b186, &b187, &b186} return parseInput(r, &p188, &b188)