From 19c308fa335e3531f9f090dc146f70329636b6e7 Mon Sep 17 00:00:00 2001 From: Arpad Ryszka Date: Mon, 8 Jan 2018 21:03:00 +0100 Subject: [PATCH] refactor command options --- cmd/treerack/args.go | 63 ++ cmd/treerack/check.go | 53 +- cmd/treerack/check_test.go | 102 --- cmd/treerack/checksyntax.go | 15 + cmd/treerack/checksyntax_test.go | 129 ++++ cmd/treerack/doc.go | 26 +- cmd/treerack/generate.go | 61 +- cmd/treerack/generate_test.go | 30 + cmd/treerack/main.go | 18 +- cmd/treerack/open.go | 68 +- cmd/treerack/parse.go | 45 ++ notes.txt | 70 +- self/self.go | 1144 +++++++++++++++--------------- 13 files changed, 972 insertions(+), 852 deletions(-) create mode 100644 cmd/treerack/args.go create mode 100644 cmd/treerack/checksyntax.go create mode 100644 cmd/treerack/checksyntax_test.go create mode 100644 cmd/treerack/parse.go diff --git a/cmd/treerack/args.go b/cmd/treerack/args.go new file mode 100644 index 0000000..c3df386 --- /dev/null +++ b/cmd/treerack/args.go @@ -0,0 +1,63 @@ +package main + +import "flag" + +type syntaxOptions struct { + usage string + example string + args []string + positional []string + syntax string + syntaxFile string + flagSet *flag.FlagSet +} + +func initOptions(usage, example string, args []string) *syntaxOptions { + var o syntaxOptions + o.usage = usage + o.example = example + o.args = args + o.flagSet = flag.NewFlagSet("", flag.ContinueOnError) + o.flagSet.Usage = func() {} + o.flagSet.SetOutput(werr) + o.flagSet.StringVar(&o.syntax, "syntax-string", "", syntaxStringUsage) + o.flagSet.StringVar(&o.syntaxFile, "syntax", "", syntaxFileUsage) + return &o +} + +func flagError(fs *flag.FlagSet) { + stderr() + stderr("Options:") + fs.PrintDefaults() +} + +func (o *syntaxOptions) parse() (exit int) { + if err := o.flagSet.Parse(o.args); err != nil { + flagError(o.flagSet) + exit = -1 + } + + o.positional = o.flagSet.Args() + return +} + +func (o *syntaxOptions) help() { + stdout(o.usage) + stdout() + stdout("Options:") + o.flagSet.SetOutput(wout) + o.flagSet.PrintDefaults() + stdout() + stdout(o.example) + stdout() + stdout(docRef) +} + +func (o *syntaxOptions) checkHelp() bool { + if len(o.args) == 0 || o.args[0] != "-help" { + return false + } + + o.help() + return true +} diff --git a/cmd/treerack/check.go b/cmd/treerack/check.go index 1f80e09..8a82bf2 100644 --- a/cmd/treerack/check.go +++ b/cmd/treerack/check.go @@ -1,54 +1,5 @@ package main -import ( - "flag" - "io" -) - -type checkOptions struct { - syntaxOptions -} - -func flagSetCheck(o *checkOptions, output io.Writer) *flag.FlagSet { - fs := flag.NewFlagSet("", flag.ContinueOnError) - fs.Usage = func() {} - fs.SetOutput(output) - fs.StringVar(&o.syntax, "syntax-string", "", syntaxStringUsage) - fs.StringVar(&o.syntaxFile, "syntax", "", syntaxFileUsage) - return fs -} - -func flagErrorCheck(fs *flag.FlagSet) { - stderr() - stderr("Options:") - fs.PrintDefaults() -} - -func helpCheck() { - stdout(checkUsage) - stdout() - stdout("Options:") - fs := flagSetCheck(&checkOptions{}, wout) - fs.PrintDefaults() - stdout() - stdout(checkExample) - stdout() - stdout(docRef) -} - -func check(args []string) int { - if len(args) > 0 && args[0] == "-help" { - helpCheck() - return 0 - } - - var options checkOptions - fs := flagSetCheck(&options, werr) - if err := fs.Parse(args); err != nil { - flagErrorCheck(fs) - return -1 - } - - _, code := open(options.syntaxOptions, fs) - return code +func check([]string) int { + return 0 } diff --git a/cmd/treerack/check_test.go b/cmd/treerack/check_test.go index 4a9a774..06ab7d0 100644 --- a/cmd/treerack/check_test.go +++ b/cmd/treerack/check_test.go @@ -1,103 +1 @@ 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", - checkExample, - docRef, - }, - }, - - mainTest{ - title: "invalid flag", - args: []string{ - "treerack", "check", "-foo", - }, - exit: -1, - stderr: []string{ - "-syntax", - "-syntax-string", - }, - }, - - mainTest{ - title: "multiple inputs", - args: []string{ - "treerack", "check", "-syntax", "foo.treerack", "-syntax-string", `foo = "bar"`, - }, - exit: -1, - stderr: []string{ - "only one", - "-syntax", - "-syntax-string", - }, - }, - - mainTest{ - title: "no input", - args: []string{ - "treerack", "check", - }, - exit: -1, - stderr: []string{ - "missing syntax input", - "-syntax", - "-syntax-string", - }, - }, - - mainTest{ - title: "invalid input", - args: []string{ - "treerack", "check", "-syntax-string", "foo", - }, - exit: -1, - stderr: []string{ - "parse failed", - }, - }, - - mainTest{ - title: "file open fails", - args: []string{ - "treerack", "check", "-syntax", "noexist.treerack", - }, - exit: -1, - stderr: []string{ - "file", - }, - }, - - mainTest{ - title: "syntax as stdin", - args: []string{ - "treerack", "check", - }, - stdin: `foo = "bar"`, - }, - - mainTest{ - title: "syntax as file", - args: []string{ - "treerack", "generate", "-syntax", "foo_test.treerack", - }, - }, - - mainTest{ - title: "syntax as string", - args: []string{ - "treerack", "generate", "-syntax-string", `foo = "bar"`, - }, - }, - ) -} diff --git a/cmd/treerack/checksyntax.go b/cmd/treerack/checksyntax.go new file mode 100644 index 0000000..d0e5279 --- /dev/null +++ b/cmd/treerack/checksyntax.go @@ -0,0 +1,15 @@ +package main + +func checkSyntax(args []string) int { + options := initOptions(checkSyntaxUsage, checkSyntaxExample, args) + if options.checkHelp() { + return 0 + } + + if code := options.parse(); code != 0 { + return code + } + + _, code := openSyntax(options) + return code +} diff --git a/cmd/treerack/checksyntax_test.go b/cmd/treerack/checksyntax_test.go new file mode 100644 index 0000000..4868cda --- /dev/null +++ b/cmd/treerack/checksyntax_test.go @@ -0,0 +1,129 @@ +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, + }, + }, + + mainTest{ + title: "invalid flag", + args: []string{ + "treerack", "check-syntax", "-foo", + }, + exit: -1, + stderr: []string{ + "-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-string", + }, + }, + + mainTest{ + title: "multiple inputs, positional", + args: []string{ + "treerack", "check-syntax", "foo.treerack", "bar.treerack", + }, + exit: -1, + stderr: []string{ + "only one", + "-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-string", + }, + }, + + mainTest{ + title: "no input", + args: []string{ + "treerack", "check-syntax", + }, + exit: -1, + stderr: []string{ + "missing syntax input", + "-syntax", + "-syntax-string", + }, + }, + + mainTest{ + title: "invalid input", + args: []string{ + "treerack", "check-syntax", "-syntax-string", "foo", + }, + exit: -1, + stderr: []string{ + "parse failed", + }, + }, + + mainTest{ + title: "file open fails", + args: []string{ + "treerack", "check-syntax", "-syntax", "noexist.treerack", + }, + 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", "generate", "-syntax", "foo_test.treerack", + }, + }, + + mainTest{ + title: "syntax as string", + args: []string{ + "treerack", "generate", "-syntax-string", `foo = "bar"`, + }, + }, + ) +} diff --git a/cmd/treerack/doc.go b/cmd/treerack/doc.go index 1dd9ce3..9ee7702 100644 --- a/cmd/treerack/doc.go +++ b/cmd/treerack/doc.go @@ -3,8 +3,11 @@ package main const summary = `treerack - parser generator - https://github.com/aryszka/treerack` const commandsHelp = `Available commands: -generate generates a parser from a syntax definition -help prints the current help +check validates an arbitrary input against a syntax definition +parse parses an arbitrary input with a syntax definition into an abstract syntax tree +check-syntax validates a syntax definition +generate generates a parser from a syntax definition +help prints the current help See more details about a particular command by calling: treerack -help` @@ -19,12 +22,17 @@ 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 generateUsage = `treerack generate takes a syntax description from the standard input, or a file, or inline string, and generates parser code implementing the described syntax. It prints the parser code to the standard output.` +const parseUsage = `'treerack parse' 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. If it was successfully parsed, it prints the resulting abstract syntax tree (AST) in JSON format.` + +const parseExample = `Example: +treerack parse -syntax example.treerack foo.example` + +const checkSyntaxUsage = `'treerack check-syntax' takes a syntax description from the standard input, or a file, or inline string, and validates it to check whether it represents a valid syntax. It returns with non-zero exit code and prints the problem if the syntax is not valid.` + +const checkSyntaxExample = `Example: +treerack check-syntax example.treerack` + +const generateUsage = `'treerack generate' takes a syntax description from the standard input, or a file, or inline string, and generates parser code implementing the described syntax. It prints the parser code to the standard output.` const generateExample = `Example: -treerack generate -syntax syntax.treerack > parser.go` - -const checkUsage = `treerack check takes a syntax description from the standard input, or a file, or inline string, and validates it to check whether it represents a valid syntax. It returns with non-zero exit code and prints the problem if the syntax is not valid.` - -const checkExample = `Example: -treerack check -syntax syntax.treerack` +treerack generate example.treerack > parser.go` diff --git a/cmd/treerack/generate.go b/cmd/treerack/generate.go index 34365ad..cd0992a 100644 --- a/cmd/treerack/generate.go +++ b/cmd/treerack/generate.go @@ -1,62 +1,24 @@ package main -import ( - "flag" - "io" - - "github.com/aryszka/treerack" -) +import "github.com/aryszka/treerack" type generateOptions struct { - syntaxOptions + *syntaxOptions packageName string export bool } -func flagSetGenerate(o *generateOptions, output io.Writer) *flag.FlagSet { - fs := flag.NewFlagSet("", flag.ContinueOnError) - fs.Usage = func() {} - fs.SetOutput(output) - fs.StringVar(&o.syntax, "syntax-string", "", syntaxStringUsage) - fs.StringVar(&o.syntaxFile, "syntax", "", syntaxFileUsage) - fs.StringVar(&o.packageName, "package-name", "", packageNameUsage) - fs.BoolVar(&o.export, "export", false, exportUsage) - return fs -} - -func flagErrorGenerate(fs *flag.FlagSet) { - stderr() - stderr("Options:") - fs.PrintDefaults() -} - -func helpGenerate() { - stdout(generateUsage) - stdout() - stdout("Options:") - fs := flagSetGenerate(&generateOptions{}, wout) - fs.PrintDefaults() - stdout() - stdout(generateExample) - stdout() - stdout(docRef) -} - func generate(args []string) int { - if len(args) > 0 && args[0] == "-help" { - helpGenerate() + var options generateOptions + options.syntaxOptions = initOptions(generateUsage, generateExample, args) + options.flagSet.BoolVar(&options.export, "export", false, exportUsage) + options.flagSet.StringVar(&options.packageName, "package-name", "", packageNameUsage) + + if options.checkHelp() { return 0 } - var options generateOptions - fs := flagSetGenerate(&options, werr) - if err := fs.Parse(args); err != nil { - flagErrorGenerate(fs) - return -1 - } - - s, code := open(options.syntaxOptions, fs) - if code != 0 { + if code := options.parse(); code != 0 { return code } @@ -64,6 +26,11 @@ func generate(args []string) int { goptions.PackageName = options.packageName goptions.Export = options.export + s, code := openSyntax(options.syntaxOptions) + if code != 0 { + return code + } + if err := s.Generate(goptions, wout); err != nil { stderr(err) return -1 diff --git a/cmd/treerack/generate_test.go b/cmd/treerack/generate_test.go index 9e5a9a7..1d09966 100644 --- a/cmd/treerack/generate_test.go +++ b/cmd/treerack/generate_test.go @@ -49,6 +49,36 @@ func TestGenerate(t *testing.T) { }, }, + mainTest{ + title: "multiple inputs, positional", + args: []string{ + "treerack", "generate", "foo.treerack", "bar.treerack", + }, + exit: -1, + stderr: []string{ + "only one", + "-export", + "-package-name", + "-syntax", + "-syntax-string", + }, + }, + + mainTest{ + title: "multiple inputs, positional and explicit file", + args: []string{ + "treerack", "generate", "-syntax", "foo.treerack", "bar.treerack", + }, + exit: -1, + stderr: []string{ + "only one", + "-export", + "-package-name", + "-syntax", + "-syntax-string", + }, + }, + mainTest{ title: "no input", args: []string{ diff --git a/cmd/treerack/main.go b/cmd/treerack/main.go index 99cb8bb..930eaf0 100644 --- a/cmd/treerack/main.go +++ b/cmd/treerack/main.go @@ -21,19 +21,27 @@ func main() { return } + var cmd func([]string) int + switch os.Args[1] { - case "check": - code := check(os.Args[2:]) - exit(code) + case "check-syntax": + cmd = checkSyntax case "generate": - code := generate(os.Args[2:]) - exit(code) + cmd = generate + case "check": + cmd = check + case "parse": + cmd = parse case "help", "-help": mainHelp() + return default: stderr("invalid command") stderr() stderr(commandsHelp) exit(-1) + return } + + exit(cmd(os.Args[2:])) } diff --git a/cmd/treerack/open.go b/cmd/treerack/open.go index 0b5ad58..85f9dfc 100644 --- a/cmd/treerack/open.go +++ b/cmd/treerack/open.go @@ -10,11 +10,6 @@ import ( "golang.org/x/crypto/ssh/terminal" ) -type syntaxOptions struct { - syntax string - syntaxFile string -} - func multipleSyntaxesError(fs *flag.FlagSet) { stderr("only one of syntax file or syntax string is allowed") stderr() @@ -29,27 +24,62 @@ func missingSyntaxError(fs *flag.FlagSet) { fs.PrintDefaults() } -func open(options syntaxOptions, fs *flag.FlagSet) (*treerack.Syntax, int) { - if options.syntaxFile != "" && options.syntax != "" { - multipleSyntaxesError(fs) - return nil, -1 +func getSource(options *syntaxOptions) (hasInput bool, fileName string, syntax string, code int) { + if len(options.positional) > 1 { + multipleSyntaxesError(options.flagSet) + code = -1 + return } - var hasInput bool - if options.syntaxFile == "" && options.syntax == "" { - hasInput = isTest && rin != nil || !isTest && !terminal.IsTerminal(0) + hasPositional := len(options.positional) == 1 + hasFile := options.syntaxFile != "" + hasSyntax := options.syntax != "" + + var has bool + for _, h := range []bool{hasPositional, hasFile, hasSyntax} { + if h && has { + multipleSyntaxesError(options.flagSet) + code = -1 + return + } + + has = h } - if !hasInput && options.syntaxFile == "" && options.syntax == "" { - missingSyntaxError(fs) - return nil, -1 + switch { + case hasPositional: + fileName = options.positional[0] + return + case hasFile: + fileName = options.syntaxFile + return + case hasSyntax: + syntax = options.syntax + return + } + + // check input last to allow explicit syntax in non-TTY environments: + hasInput = isTest && rin != nil || !isTest && !terminal.IsTerminal(0) + if !hasInput { + missingSyntaxError(options.flagSet) + code = -1 + return + } + + return +} + +func openSyntax(options *syntaxOptions) (*treerack.Syntax, int) { + hasInput, fileName, syntax, code := getSource(options) + if code != 0 { + return nil, code } var input io.Reader if hasInput { input = rin - } else if options.syntaxFile != "" { - f, err := os.Open(options.syntaxFile) + } else if fileName != "" { + f, err := os.Open(fileName) if err != nil { stderr(err) return nil, -1 @@ -57,8 +87,8 @@ func open(options syntaxOptions, fs *flag.FlagSet) (*treerack.Syntax, int) { defer f.Close() input = f - } else if options.syntax != "" { - input = bytes.NewBufferString(options.syntax) + } else { + input = bytes.NewBufferString(syntax) } s := &treerack.Syntax{} diff --git a/cmd/treerack/parse.go b/cmd/treerack/parse.go new file mode 100644 index 0000000..140e78e --- /dev/null +++ b/cmd/treerack/parse.go @@ -0,0 +1,45 @@ +package main + +import ( + "flag" + "io" +) + +type parseOptions struct { + syntaxOptions + input string + inputFile string + pretty bool + indent string +} + +func flagSetParse(o *parseOptions, output io.Writer) *flag.FlagSet { + fs := flag.NewFlagSet("", flag.ContinueOnError) + fs.Usage = func() {} + fs.SetOutput(output) + fs.StringVar(&o.syntax, "syntax-string", "", syntaxStringUsage) + fs.StringVar(&o.syntaxFile, "syntax", "", syntaxFileUsage) + return fs +} + +func flagErrorParse(fs *flag.FlagSet) { + stderr() + stderr("Options:") + fs.PrintDefaults() +} + +func helpParse() { + stdout(parseUsage) + stdout() + stdout("Options:") + fs := flagSetParse(&parseOptions{}, wout) + fs.PrintDefaults() + stdout() + stdout(parseExample) + stdout() + stdout(docRef) +} + +func parse(args []string) int { + return 0 +} diff --git a/notes.txt b/notes.txt index de0d1f9..de58a74 100644 --- a/notes.txt +++ b/notes.txt @@ -1,59 +1,35 @@ -error reporting -- longest parse -- count the lines -- print the line -- print the deepest non-alias node name -- print the documentation of the node name -- make it work with custom tokens -read, with error reporting -what was the bug with the large json from eskip? - [next] -check -parse -error reports -- take the last -simplify generator output -make generator output non-random (track parsers in a list in definition order) -missing tests, coverage: -- validation -- error cases -- whitespace cases -error reporting -coverage +formatter +report unused parsers +parse hashed, storing only the results +linux packaging + +[parser] custom tokens indentation -streaming -code generation go: -- find things that depend on the syntax input -- char matches can be generated into switches -code generation js -documentation flag -support custom tokenization -streaming -verify choice and sequence preference -formatter -pretty -report unused parsers -go through the tests for docs -test all docs -warn nows usage in docs, e.g. spaces in symbol = [a-z]+ +streaming support // ReadNode(io.Reader) + +[cmd] +check +parse +help for positional argument +test explicit input priority + +[errors] +take the last test error report on invalid flag -report unused definitions -simplify generated output -parse hashed, storing only the results -allchars: can have char sequence input name: may be just dropped because completely controlled by the client +[generator] +allchars: can have char sequence +make generator output non-random (track parsers in a list in definition order) +js + [optimization] try preallocate larger store chunks -notes in formatting -format: test back and forth equivalence of char classes -format: test comments, first apply comments in the syntax - -[problems] -can the root be an alias? check the commit mechanism [documentation] how the char classes are different from regexp why need nows when using ws +lib only useful for dynamic syntax definition +warn nows usage in docs, e.g. spaces in symbol = [a-z]+ diff --git a/self/self.go b/self/self.go index 98bb37b..34edf98 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 p112 = choiceParser{id: 112, commit: 66, name: "wschar", generalizations: []int{185, 186}} - var p137 = sequenceParser{id: 137, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{112, 185, 186}} - var p182 = charParser{id: 182, chars: []rune{32}} - p137.items = []parser{&p182} - var p164 = sequenceParser{id: 164, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{112, 185, 186}} - var p10 = charParser{id: 10, chars: []rune{9}} - p164.items = []parser{&p10} - var p11 = sequenceParser{id: 11, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{112, 185, 186}} - var p21 = charParser{id: 21, chars: []rune{10}} - p11.items = []parser{&p21} - var p45 = sequenceParser{id: 45, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{112, 185, 186}} - var p159 = charParser{id: 159, chars: []rune{8}} - p45.items = []parser{&p159} - var p25 = sequenceParser{id: 25, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{112, 185, 186}} - var p66 = charParser{id: 66, chars: []rune{12}} - p25.items = []parser{&p66} - var p67 = sequenceParser{id: 67, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{112, 185, 186}} - var p12 = charParser{id: 12, chars: []rune{13}} - p67.items = []parser{&p12} - var p117 = sequenceParser{id: 117, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{112, 185, 186}} - var p22 = charParser{id: 22, chars: []rune{11}} - p117.items = []parser{&p22} - p112.options = []parser{&p137, &p164, &p11, &p45, &p25, &p67, &p117} - var p18 = sequenceParser{id: 18, commit: 72, name: "comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}, generalizations: []int{185, 186}} - var p34 = choiceParser{id: 34, commit: 74, name: "comment-segment"} - var p101 = sequenceParser{id: 101, commit: 74, name: "line-comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}, generalizations: []int{34}} - var p17 = sequenceParser{id: 17, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var p118 = charParser{id: 118, chars: []rune{47}} - var p6 = charParser{id: 6, chars: []rune{47}} - p17.items = []parser{&p118, &p6} + var p148 = choiceParser{id: 148, commit: 66, name: "wschar", generalizations: []int{185, 186}} + var p109 = sequenceParser{id: 109, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{148, 185, 186}} + var p52 = charParser{id: 52, chars: []rune{32}} + p109.items = []parser{&p52} + var p24 = sequenceParser{id: 24, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{148, 185, 186}} + var p147 = charParser{id: 147, chars: []rune{9}} + p24.items = []parser{&p147} + var p15 = sequenceParser{id: 15, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{148, 185, 186}} + var p77 = charParser{id: 77, chars: []rune{10}} + p15.items = []parser{&p77} + var p33 = sequenceParser{id: 33, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{148, 185, 186}} + var p37 = charParser{id: 37, chars: []rune{8}} + p33.items = []parser{&p37} + var p45 = sequenceParser{id: 45, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{148, 185, 186}} + var p129 = charParser{id: 129, chars: []rune{12}} + p45.items = []parser{&p129} + var p5 = sequenceParser{id: 5, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{148, 185, 186}} + var p84 = charParser{id: 84, chars: []rune{13}} + p5.items = []parser{&p84} + var p85 = sequenceParser{id: 85, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{148, 185, 186}} + var p25 = charParser{id: 25, chars: []rune{11}} + p85.items = []parser{&p25} + p148.options = []parser{&p109, &p24, &p15, &p33, &p45, &p5, &p85} + var p103 = sequenceParser{id: 103, commit: 72, name: "comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}, generalizations: []int{185, 186}} + var p110 = choiceParser{id: 110, commit: 74, name: "comment-segment"} + var p34 = sequenceParser{id: 34, commit: 74, name: "line-comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}, generalizations: []int{110}} + var p53 = sequenceParser{id: 53, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var p17 = charParser{id: 17, chars: []rune{47}} + var p47 = charParser{id: 47, chars: []rune{47}} + p53.items = []parser{&p17, &p47} var p119 = sequenceParser{id: 119, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p165 = charParser{id: 165, not: true, chars: []rune{10}} - p119.items = []parser{&p165} - p101.items = []parser{&p17, &p119} - var p68 = sequenceParser{id: 68, commit: 74, name: "block-comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{34}} - var p16 = sequenceParser{id: 16, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var p148 = charParser{id: 148, chars: []rune{47}} - var p46 = charParser{id: 46, chars: []rune{42}} - p16.items = []parser{&p148, &p46} - var p23 = choiceParser{id: 23, commit: 10} - var p129 = sequenceParser{id: 129, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{23}} - var p56 = sequenceParser{id: 56, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p100 = charParser{id: 100, chars: []rune{42}} - p56.items = []parser{&p100} - var p5 = sequenceParser{id: 5, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p47 = charParser{id: 47, not: true, chars: []rune{47}} - p5.items = []parser{&p47} - p129.items = []parser{&p56, &p5} - var p125 = sequenceParser{id: 125, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{23}} - var p183 = charParser{id: 183, not: true, chars: []rune{42}} - p125.items = []parser{&p183} - p23.options = []parser{&p129, &p125} - var p121 = sequenceParser{id: 121, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var p57 = charParser{id: 57, chars: []rune{42}} - var p92 = charParser{id: 92, chars: []rune{47}} - p121.items = []parser{&p57, &p92} - p68.items = []parser{&p16, &p23, &p121} - p34.options = []parser{&p101, &p68} - var p41 = sequenceParser{id: 41, commit: 10, ranges: [][]int{{0, -1}, {0, 1}, {0, -1}, {1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}}} - var p87 = choiceParser{id: 87, commit: 74, name: "ws-no-nl"} - var p102 = sequenceParser{id: 102, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{87}} - var p149 = charParser{id: 149, chars: []rune{32}} - p102.items = []parser{&p149} - var p76 = sequenceParser{id: 76, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{87}} - var p138 = charParser{id: 138, chars: []rune{9}} - p76.items = []parser{&p138} - var p40 = sequenceParser{id: 40, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{87}} - var p61 = charParser{id: 61, chars: []rune{8}} - p40.items = []parser{&p61} - var p95 = sequenceParser{id: 95, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{87}} - var p150 = charParser{id: 150, chars: []rune{12}} - p95.items = []parser{&p150} - var p62 = sequenceParser{id: 62, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{87}} - var p93 = charParser{id: 93, chars: []rune{13}} - p62.items = []parser{&p93} - var p107 = sequenceParser{id: 107, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{87}} - var p19 = charParser{id: 19, chars: []rune{11}} - p107.items = []parser{&p19} - p87.options = []parser{&p102, &p76, &p40, &p95, &p62, &p107} - var p169 = sequenceParser{id: 169, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p143 = charParser{id: 143, chars: []rune{10}} - p169.items = []parser{&p143} - p41.items = []parser{&p87, &p169, &p87, &p34} - p18.items = []parser{&p34, &p41} - p185.options = []parser{&p112, &p18} + var p150 = charParser{id: 150, not: true, chars: []rune{10}} + p119.items = []parser{&p150} + p34.items = []parser{&p53, &p119} + var p73 = sequenceParser{id: 73, commit: 74, name: "block-comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{110}} + var p46 = sequenceParser{id: 46, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var p130 = charParser{id: 130, chars: []rune{47}} + var p101 = charParser{id: 101, chars: []rune{42}} + p46.items = []parser{&p130, &p101} + var p131 = choiceParser{id: 131, commit: 10} + var p161 = sequenceParser{id: 161, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{131}} + var p62 = sequenceParser{id: 62, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p61 = charParser{id: 61, chars: []rune{42}} + p62.items = []parser{&p61} + var p118 = sequenceParser{id: 118, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p72 = charParser{id: 72, not: true, chars: []rune{47}} + p118.items = []parser{&p72} + p161.items = []parser{&p62, &p118} + var p78 = sequenceParser{id: 78, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{131}} + var p95 = charParser{id: 95, not: true, chars: []rune{42}} + p78.items = []parser{&p95} + p131.options = []parser{&p161, &p78} + var p140 = sequenceParser{id: 140, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var p96 = charParser{id: 96, chars: []rune{42}} + var p16 = charParser{id: 16, chars: []rune{47}} + p140.items = []parser{&p96, &p16} + p73.items = []parser{&p46, &p131, &p140} + p110.options = []parser{&p34, &p73} + var p31 = sequenceParser{id: 31, commit: 10, ranges: [][]int{{0, -1}, {0, 1}, {0, -1}, {1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}}} + var p111 = choiceParser{id: 111, commit: 74, name: "ws-no-nl"} + var p26 = sequenceParser{id: 26, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{111}} + var p182 = charParser{id: 182, chars: []rune{32}} + p26.items = []parser{&p182} + var p124 = sequenceParser{id: 124, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{111}} + var p10 = charParser{id: 10, chars: []rune{9}} + p124.items = []parser{&p10} + var p30 = sequenceParser{id: 30, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{111}} + var p29 = charParser{id: 29, chars: []rune{8}} + p30.items = []parser{&p29} + var p133 = sequenceParser{id: 133, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{111}} + var p40 = charParser{id: 40, chars: []rune{12}} + p133.items = []parser{&p40} + var p102 = sequenceParser{id: 102, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{111}} + var p41 = charParser{id: 41, chars: []rune{13}} + p102.items = []parser{&p41} + var p149 = sequenceParser{id: 149, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{111}} + var p35 = charParser{id: 35, chars: []rune{11}} + p149.items = []parser{&p35} + p111.options = []parser{&p26, &p124, &p30, &p133, &p102, &p149} + var p141 = sequenceParser{id: 141, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p162 = charParser{id: 162, chars: []rune{10}} + p141.items = []parser{&p162} + p31.items = []parser{&p111, &p141, &p111, &p110} + p103.items = []parser{&p110, &p31} + p185.options = []parser{&p148, &p103} 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 p31 = sequenceParser{id: 31, commit: 2, ranges: [][]int{{1, 1}, {0, -1}}} - var p174 = sequenceParser{id: 174, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p9 = charParser{id: 9, chars: []rune{59}} - p174.items = []parser{&p9} - var p30 = sequenceParser{id: 30, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - p30.items = []parser{&p186, &p174} - p31.items = []parser{&p174, &p30} - var p142 = sequenceParser{id: 142, commit: 66, name: "definitions", ranges: [][]int{{1, 1}, {0, 1}}} - var p173 = sequenceParser{id: 173, commit: 64, name: "definition", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} - var p71 = sequenceParser{id: 71, commit: 74, name: "definition-name", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} - var p28 = sequenceParser{id: 28, commit: 72, name: "symbol", ranges: [][]int{{1, -1}, {1, -1}}, generalizations: []int{162, 44, 184}} - var p177 = sequenceParser{id: 177, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p79 = charParser{id: 79, 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}} - p177.items = []parser{&p79} - p28.items = []parser{&p177} - var p86 = sequenceParser{id: 86, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var p85 = sequenceParser{id: 85, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p152 = charParser{id: 152, chars: []rune{58}} - p85.items = []parser{&p152} - var p151 = choiceParser{id: 151, commit: 66, name: "flag"} - var p50 = sequenceParser{id: 50, 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{151}} - var p81 = charParser{id: 81, chars: []rune{97}} - var p14 = charParser{id: 14, chars: []rune{108}} - var p97 = charParser{id: 97, chars: []rune{105}} - var p35 = charParser{id: 35, chars: []rune{97}} - var p171 = charParser{id: 171, chars: []rune{115}} - p50.items = []parser{&p81, &p14, &p97, &p35, &p171} - var p69 = sequenceParser{id: 69, commit: 72, name: "ws", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{151}} - var p116 = charParser{id: 116, chars: []rune{119}} - var p98 = charParser{id: 98, chars: []rune{115}} - p69.items = []parser{&p116, &p98} - var p84 = sequenceParser{id: 84, 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{151}} - var p99 = charParser{id: 99, chars: []rune{110}} - var p90 = charParser{id: 90, chars: []rune{111}} - var p106 = charParser{id: 106, chars: []rune{119}} - var p126 = charParser{id: 126, chars: []rune{115}} - p84.items = []parser{&p99, &p90, &p106, &p126} - var p172 = sequenceParser{id: 172, 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{151}} - var p180 = charParser{id: 180, chars: []rune{102}} - var p135 = charParser{id: 135, chars: []rune{97}} - var p163 = charParser{id: 163, chars: []rune{105}} - var p15 = charParser{id: 15, chars: []rune{108}} - var p127 = charParser{id: 127, chars: []rune{112}} - var p70 = charParser{id: 70, chars: []rune{97}} - var p60 = charParser{id: 60, chars: []rune{115}} - var p167 = charParser{id: 167, chars: []rune{115}} - p172.items = []parser{&p180, &p135, &p163, &p15, &p127, &p70, &p60, &p167} - var p36 = sequenceParser{id: 36, 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{151}} - var p147 = charParser{id: 147, chars: []rune{114}} - var p128 = charParser{id: 128, chars: []rune{111}} - var p103 = charParser{id: 103, chars: []rune{111}} - var p136 = charParser{id: 136, chars: []rune{116}} - p36.items = []parser{&p147, &p128, &p103, &p136} - p151.options = []parser{&p50, &p69, &p84, &p172, &p36} - p86.items = []parser{&p85, &p151} - p71.items = []parser{&p28, &p86} + var p164 = sequenceParser{id: 164, commit: 2, ranges: [][]int{{1, 1}, {0, -1}}} var p181 = sequenceParser{id: 181, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p104 = charParser{id: 104, chars: []rune{61}} - p181.items = []parser{&p104} - var p162 = choiceParser{id: 162, commit: 66, name: "expression"} - var p130 = choiceParser{id: 130, commit: 66, name: "terminal", generalizations: []int{162, 44, 184}} - var p58 = sequenceParser{id: 58, commit: 72, name: "any-char", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{130, 162, 44, 184}} - var p113 = charParser{id: 113, chars: []rune{46}} - p58.items = []parser{&p113} - var p114 = sequenceParser{id: 114, 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{130, 162, 44, 184}} - var p73 = sequenceParser{id: 73, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p160 = charParser{id: 160, chars: []rune{91}} - p73.items = []parser{&p160} - var p175 = sequenceParser{id: 175, commit: 72, name: "class-not", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p108 = charParser{id: 108, chars: []rune{94}} - p175.items = []parser{&p108} - var p48 = choiceParser{id: 48, commit: 10} - var p37 = choiceParser{id: 37, commit: 72, name: "class-char", generalizations: []int{48}} - var p176 = sequenceParser{id: 176, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{37, 48}} - var p88 = charParser{id: 88, not: true, chars: []rune{92, 91, 93, 94, 45}} - p176.items = []parser{&p88} - var p89 = sequenceParser{id: 89, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{37, 48}} - var p42 = sequenceParser{id: 42, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p7 = charParser{id: 7, chars: []rune{92}} - p42.items = []parser{&p7} - var p139 = sequenceParser{id: 139, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p144 = charParser{id: 144, not: true} - p139.items = []parser{&p144} - p89.items = []parser{&p42, &p139} - p37.options = []parser{&p176, &p89} - var p82 = sequenceParser{id: 82, commit: 72, name: "char-range", ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{48}} - var p8 = sequenceParser{id: 8, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p145 = charParser{id: 145, chars: []rune{45}} - p8.items = []parser{&p145} - p82.items = []parser{&p37, &p8, &p37} - p48.options = []parser{&p37, &p82} - var p38 = sequenceParser{id: 38, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p51 = charParser{id: 51, chars: []rune{93}} - p38.items = []parser{&p51} - p114.items = []parser{&p73, &p175, &p48, &p38} - var p2 = sequenceParser{id: 2, commit: 72, name: "char-sequence", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{130, 162, 44, 184}} - var p1 = sequenceParser{id: 1, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p26 = charParser{id: 26, chars: []rune{34}} - p1.items = []parser{&p26} - var p96 = choiceParser{id: 96, commit: 72, name: "sequence-char"} - var p77 = sequenceParser{id: 77, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{96}} - var p20 = charParser{id: 20, not: true, chars: []rune{92, 34}} - p77.items = []parser{&p20} - var p75 = sequenceParser{id: 75, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{96}} + var p154 = charParser{id: 154, chars: []rune{59}} + p181.items = []parser{&p154} + var p163 = sequenceParser{id: 163, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + p163.items = []parser{&p186, &p181} + p164.items = []parser{&p181, &p163} + var p117 = sequenceParser{id: 117, commit: 66, name: "definitions", ranges: [][]int{{1, 1}, {0, 1}}} + var p18 = sequenceParser{id: 18, commit: 64, name: "definition", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} + var p114 = sequenceParser{id: 114, commit: 74, name: "definition-name", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} + var p93 = sequenceParser{id: 93, commit: 72, name: "symbol", ranges: [][]int{{1, -1}, {1, -1}}, generalizations: []int{59, 88, 39}} + var p80 = sequenceParser{id: 80, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p107 = charParser{id: 107, 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}} + p80.items = []parser{&p107} + p93.items = []parser{&p80} + var p83 = sequenceParser{id: 83, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var p71 = sequenceParser{id: 71, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p70 = charParser{id: 70, chars: []rune{58}} + p71.items = []parser{&p70} + var p4 = choiceParser{id: 4, commit: 66, name: "flag"} + var p56 = sequenceParser{id: 56, 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 p134 = charParser{id: 134, chars: []rune{97}} + var p64 = charParser{id: 64, chars: []rune{108}} + var p170 = charParser{id: 170, chars: []rune{105}} + var p99 = charParser{id: 99, chars: []rune{97}} + var p123 = charParser{id: 123, chars: []rune{115}} + p56.items = []parser{&p134, &p64, &p170, &p99, &p123} + var p22 = sequenceParser{id: 22, commit: 72, name: "ws", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{4}} + var p184 = charParser{id: 184, chars: []rune{119}} + var p174 = charParser{id: 174, chars: []rune{115}} + p22.items = []parser{&p184, &p174} + var p57 = sequenceParser{id: 57, 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 p23 = charParser{id: 23, chars: []rune{110}} + var p135 = charParser{id: 135, chars: []rune{111}} + var p159 = charParser{id: 159, chars: []rune{119}} + var p54 = charParser{id: 54, chars: []rune{115}} + p57.items = []parser{&p23, &p135, &p159, &p54} + var p51 = sequenceParser{id: 51, 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 p50 = charParser{id: 50, chars: []rune{102}} + var p60 = charParser{id: 60, chars: []rune{97}} + var p178 = charParser{id: 178, chars: []rune{105}} + var p89 = charParser{id: 89, chars: []rune{108}} + var p69 = charParser{id: 69, chars: []rune{112}} + var p175 = charParser{id: 175, chars: []rune{97}} + var p138 = charParser{id: 138, chars: []rune{115}} + var p113 = charParser{id: 113, chars: []rune{115}} + p51.items = []parser{&p50, &p60, &p178, &p89, &p69, &p175, &p138, &p113} + var p28 = sequenceParser{id: 28, 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 p9 = charParser{id: 9, chars: []rune{114}} + var p100 = charParser{id: 100, chars: []rune{111}} + var p160 = charParser{id: 160, chars: []rune{111}} + var p76 = charParser{id: 76, chars: []rune{116}} + p28.items = []parser{&p9, &p100, &p160, &p76} + p4.options = []parser{&p56, &p22, &p57, &p51, &p28} + p83.items = []parser{&p71, &p4} + p114.items = []parser{&p93, &p83} var p49 = sequenceParser{id: 49, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p74 = charParser{id: 74, chars: []rune{92}} - p49.items = []parser{&p74} - var p154 = sequenceParser{id: 154, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p132 = charParser{id: 132, not: true} - p154.items = []parser{&p132} - p75.items = []parser{&p49, &p154} - p96.options = []parser{&p77, &p75} - var p155 = sequenceParser{id: 155, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p94 = charParser{id: 94, chars: []rune{34}} - p155.items = []parser{&p94} - p2.items = []parser{&p1, &p96, &p155} - p130.options = []parser{&p58, &p114, &p2} - var p27 = sequenceParser{id: 27, commit: 66, name: "group", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{162, 44, 184}} - var p166 = sequenceParser{id: 166, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p110 = charParser{id: 110, chars: []rune{40}} - p166.items = []parser{&p110} - var p83 = sequenceParser{id: 83, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p52 = charParser{id: 52, chars: []rune{41}} - p83.items = []parser{&p52} - p27.items = []parser{&p166, &p186, &p162, &p186, &p83} - var p124 = sequenceParser{id: 124, commit: 64, name: "sequence", ranges: [][]int{{1, 1}, {0, -1}}, generalizations: []int{162, 184}} - var p65 = sequenceParser{id: 65, commit: 72, name: "item", ranges: [][]int{{1, 1}, {0, 1}, {1, 1}, {0, 1}}} - var p44 = choiceParser{id: 44, commit: 10} - p44.options = []parser{&p130, &p28, &p27} - var p29 = choiceParser{id: 29, commit: 66, name: "quantity"} - var p161 = sequenceParser{id: 161, commit: 64, name: "count-quantifier", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{29}} - var p156 = sequenceParser{id: 156, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p170 = charParser{id: 170, chars: []rune{123}} - p156.items = []parser{&p170} - var p53 = sequenceParser{id: 53, commit: 64, name: "count", ranges: [][]int{{1, 1}}} - var p146 = sequenceParser{id: 146, commit: 74, name: "number", ranges: [][]int{{1, -1}, {1, -1}}} - var p63 = sequenceParser{id: 63, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p133 = charParser{id: 133, ranges: [][]rune{{48, 57}}} - p63.items = []parser{&p133} - p146.items = []parser{&p63} - p53.items = []parser{&p146} - var p39 = sequenceParser{id: 39, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p64 = charParser{id: 64, chars: []rune{125}} - p39.items = []parser{&p64} - p161.items = []parser{&p156, &p186, &p53, &p186, &p39} - var p122 = sequenceParser{id: 122, 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{29}} - var p13 = sequenceParser{id: 13, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p115 = charParser{id: 115, chars: []rune{123}} - p13.items = []parser{&p115} - var p80 = sequenceParser{id: 80, commit: 64, name: "range-from", ranges: [][]int{{1, 1}}} - p80.items = []parser{&p146} - var p55 = sequenceParser{id: 55, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p54 = charParser{id: 54, chars: []rune{44}} - p55.items = []parser{&p54} - var p43 = sequenceParser{id: 43, commit: 64, name: "range-to", ranges: [][]int{{1, 1}}} - p43.items = []parser{&p146} - var p78 = sequenceParser{id: 78, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p157 = charParser{id: 157, chars: []rune{125}} - p78.items = []parser{&p157} - p122.items = []parser{&p13, &p186, &p80, &p186, &p55, &p186, &p43, &p186, &p78} - var p109 = sequenceParser{id: 109, commit: 72, name: "one-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{29}} - var p111 = charParser{id: 111, chars: []rune{43}} - p109.items = []parser{&p111} - var p105 = sequenceParser{id: 105, commit: 72, name: "zero-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{29}} - var p131 = charParser{id: 131, chars: []rune{42}} - p105.items = []parser{&p131} - var p72 = sequenceParser{id: 72, commit: 72, name: "zero-or-one", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{29}} - var p59 = charParser{id: 59, chars: []rune{63}} - p72.items = []parser{&p59} - p29.options = []parser{&p161, &p122, &p109, &p105, &p72} - p65.items = []parser{&p44, &p29} - var p123 = sequenceParser{id: 123, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - p123.items = []parser{&p186, &p65} - p124.items = []parser{&p65, &p123} - var p179 = sequenceParser{id: 179, commit: 64, name: "choice", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}, generalizations: []int{162}} - var p184 = choiceParser{id: 184, commit: 66, name: "option"} - p184.options = []parser{&p130, &p28, &p27, &p124} - var p158 = sequenceParser{id: 158, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}}} - var p24 = sequenceParser{id: 24, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p134 = charParser{id: 134, chars: []rune{124}} - p24.items = []parser{&p134} - p158.items = []parser{&p24, &p186, &p184} - var p178 = sequenceParser{id: 178, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - p178.items = []parser{&p186, &p158} - p179.items = []parser{&p184, &p186, &p158, &p178} - p162.options = []parser{&p130, &p28, &p27, &p124, &p179} - p173.items = []parser{&p71, &p186, &p181, &p186, &p162} - var p141 = sequenceParser{id: 141, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} - var p4 = sequenceParser{id: 4, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {0, -1}, {1, 1}}} - var p91 = sequenceParser{id: 91, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p153 = charParser{id: 153, chars: []rune{59}} - p91.items = []parser{&p153} - var p3 = sequenceParser{id: 3, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - p3.items = []parser{&p186, &p91} - p4.items = []parser{&p91, &p3, &p186, &p173} - var p140 = sequenceParser{id: 140, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - p140.items = []parser{&p186, &p4} - p141.items = []parser{&p186, &p4, &p140} - p142.items = []parser{&p173, &p141} - var p33 = sequenceParser{id: 33, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} + var p132 = charParser{id: 132, chars: []rune{61}} + p49.items = []parser{&p132} + var p59 = choiceParser{id: 59, commit: 66, name: "expression"} + var p136 = choiceParser{id: 136, commit: 66, name: "terminal", generalizations: []int{59, 88, 39}} + var p6 = sequenceParser{id: 6, commit: 72, name: "any-char", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{136, 59, 88, 39}} + var p104 = charParser{id: 104, chars: []rune{46}} + p6.items = []parser{&p104} + var p75 = sequenceParser{id: 75, 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{136, 59, 88, 39}} + var p86 = sequenceParser{id: 86, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p105 = charParser{id: 105, chars: []rune{91}} + p86.items = []parser{&p105} + var p79 = sequenceParser{id: 79, commit: 72, name: "class-not", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p171 = charParser{id: 171, chars: []rune{94}} + p79.items = []parser{&p171} + var p125 = choiceParser{id: 125, commit: 10} + var p157 = choiceParser{id: 157, commit: 72, name: "class-char", generalizations: []int{125}} + var p7 = sequenceParser{id: 7, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{157, 125}} + var p90 = charParser{id: 90, not: true, chars: []rune{92, 91, 93, 94, 45}} + p7.items = []parser{&p90} + var p173 = sequenceParser{id: 173, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{157, 125}} + var p172 = sequenceParser{id: 172, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p155 = charParser{id: 155, chars: []rune{92}} + p172.items = []parser{&p155} + var p183 = sequenceParser{id: 183, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p156 = charParser{id: 156, not: true} + p183.items = []parser{&p156} + p173.items = []parser{&p172, &p183} + p157.options = []parser{&p7, &p173} + var p91 = sequenceParser{id: 91, commit: 72, name: "char-range", ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{125}} var p120 = sequenceParser{id: 120, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var p168 = charParser{id: 168, chars: []rune{59}} - p120.items = []parser{&p168} - var p32 = sequenceParser{id: 32, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - p32.items = []parser{&p186, &p120} - p33.items = []parser{&p186, &p120, &p32} - p187.items = []parser{&p31, &p186, &p142, &p33} + var p74 = charParser{id: 74, chars: []rune{45}} + p120.items = []parser{&p74} + p91.items = []parser{&p157, &p120, &p157} + p125.options = []parser{&p157, &p91} + var p1 = sequenceParser{id: 1, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p112 = charParser{id: 112, chars: []rune{93}} + p1.items = []parser{&p112} + p75.items = []parser{&p86, &p79, &p125, &p1} + var p2 = sequenceParser{id: 2, commit: 72, name: "char-sequence", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{136, 59, 88, 39}} + var p127 = sequenceParser{id: 127, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p97 = charParser{id: 97, chars: []rune{34}} + p127.items = []parser{&p97} + var p43 = choiceParser{id: 43, commit: 72, name: "sequence-char"} + var p142 = sequenceParser{id: 142, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{43}} + var p92 = charParser{id: 92, not: true, chars: []rune{92, 34}} + p142.items = []parser{&p92} + var p19 = sequenceParser{id: 19, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}, generalizations: []int{43}} + var p42 = sequenceParser{id: 42, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p38 = charParser{id: 38, chars: []rune{92}} + p42.items = []parser{&p38} + var p87 = sequenceParser{id: 87, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p106 = charParser{id: 106, not: true} + p87.items = []parser{&p106} + p19.items = []parser{&p42, &p87} + p43.options = []parser{&p142, &p19} + var p11 = sequenceParser{id: 11, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p20 = charParser{id: 20, chars: []rune{34}} + p11.items = []parser{&p20} + p2.items = []parser{&p127, &p43, &p11} + p136.options = []parser{&p6, &p75, &p2} + var p167 = sequenceParser{id: 167, commit: 66, name: "group", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{59, 88, 39}} + var p126 = sequenceParser{id: 126, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p151 = charParser{id: 151, chars: []rune{40}} + p126.items = []parser{&p151} + var p12 = sequenceParser{id: 12, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p176 = charParser{id: 176, chars: []rune{41}} + p12.items = []parser{&p176} + p167.items = []parser{&p126, &p186, &p59, &p186, &p12} + var p146 = sequenceParser{id: 146, commit: 64, name: "sequence", ranges: [][]int{{1, 1}, {0, -1}}, generalizations: []int{59, 39}} + var p68 = sequenceParser{id: 68, commit: 72, name: "item", ranges: [][]int{{1, 1}, {0, 1}, {1, 1}, {0, 1}}} + var p88 = choiceParser{id: 88, commit: 10} + p88.options = []parser{&p136, &p93, &p167} + var p122 = choiceParser{id: 122, commit: 66, name: "quantity"} + var p108 = sequenceParser{id: 108, commit: 64, name: "count-quantifier", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}, generalizations: []int{122}} + var p44 = sequenceParser{id: 44, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p128 = charParser{id: 128, chars: []rune{123}} + p44.items = []parser{&p128} + var p27 = sequenceParser{id: 27, commit: 64, name: "count", ranges: [][]int{{1, 1}}} + var p98 = sequenceParser{id: 98, commit: 74, name: "number", ranges: [][]int{{1, -1}, {1, -1}}} + var p121 = sequenceParser{id: 121, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p143 = charParser{id: 143, ranges: [][]rune{{48, 57}}} + p121.items = []parser{&p143} + p98.items = []parser{&p121} + p27.items = []parser{&p98} + var p63 = sequenceParser{id: 63, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p55 = charParser{id: 55, chars: []rune{125}} + p63.items = []parser{&p55} + p108.items = []parser{&p44, &p186, &p27, &p186, &p63} + var p81 = sequenceParser{id: 81, 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{122}} + var p21 = sequenceParser{id: 21, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p8 = charParser{id: 8, chars: []rune{123}} + p21.items = []parser{&p8} + var p65 = sequenceParser{id: 65, commit: 64, name: "range-from", ranges: [][]int{{1, 1}}} + p65.items = []parser{&p98} + var p58 = sequenceParser{id: 58, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p153 = charParser{id: 153, chars: []rune{44}} + p58.items = []parser{&p153} + var p152 = sequenceParser{id: 152, commit: 64, name: "range-to", ranges: [][]int{{1, 1}}} + p152.items = []parser{&p98} + var p48 = sequenceParser{id: 48, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p158 = charParser{id: 158, chars: []rune{125}} + p48.items = []parser{&p158} + p81.items = []parser{&p21, &p186, &p65, &p186, &p58, &p186, &p152, &p186, &p48} + var p82 = sequenceParser{id: 82, commit: 72, name: "one-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{122}} + var p144 = charParser{id: 144, chars: []rune{43}} + p82.items = []parser{&p144} + var p13 = sequenceParser{id: 13, commit: 72, name: "zero-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{122}} + var p137 = charParser{id: 137, chars: []rune{42}} + p13.items = []parser{&p137} + var p3 = sequenceParser{id: 3, commit: 72, name: "zero-or-one", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}, generalizations: []int{122}} + var p14 = charParser{id: 14, chars: []rune{63}} + p3.items = []parser{&p14} + p122.options = []parser{&p108, &p81, &p82, &p13, &p3} + p68.items = []parser{&p88, &p122} + var p145 = sequenceParser{id: 145, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + p145.items = []parser{&p186, &p68} + p146.items = []parser{&p68, &p145} + var p169 = sequenceParser{id: 169, commit: 64, name: "choice", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}, generalizations: []int{59}} + var p39 = choiceParser{id: 39, commit: 66, name: "option"} + p39.options = []parser{&p136, &p93, &p167, &p146} + var p177 = sequenceParser{id: 177, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}}} + var p67 = sequenceParser{id: 67, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p66 = charParser{id: 66, chars: []rune{124}} + p67.items = []parser{&p66} + p177.items = []parser{&p67, &p186, &p39} + var p168 = sequenceParser{id: 168, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + p168.items = []parser{&p186, &p177} + p169.items = []parser{&p39, &p186, &p177, &p168} + p59.options = []parser{&p136, &p93, &p167, &p146, &p169} + p18.items = []parser{&p114, &p186, &p49, &p186, &p59} + var p116 = sequenceParser{id: 116, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} + var p180 = sequenceParser{id: 180, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {0, -1}, {1, 1}}} + var p36 = sequenceParser{id: 36, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p32 = charParser{id: 32, chars: []rune{59}} + p36.items = []parser{&p32} + var p179 = sequenceParser{id: 179, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + p179.items = []parser{&p186, &p36} + p180.items = []parser{&p36, &p179, &p186, &p18} + var p115 = sequenceParser{id: 115, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + p115.items = []parser{&p186, &p180} + p116.items = []parser{&p186, &p180, &p115} + p117.items = []parser{&p18, &p116} + var p166 = sequenceParser{id: 166, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} + var p139 = sequenceParser{id: 139, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var p94 = charParser{id: 94, chars: []rune{59}} + p139.items = []parser{&p94} + var p165 = sequenceParser{id: 165, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + p165.items = []parser{&p186, &p139} + p166.items = []parser{&p186, &p139, &p165} + p187.items = []parser{&p164, &p186, &p117, &p166} 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 b112 = choiceBuilder{id: 112, commit: 66} - var b137 = sequenceBuilder{id: 137, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b182 = charBuilder{} - b137.items = []builder{&b182} - var b164 = sequenceBuilder{id: 164, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b10 = charBuilder{} - b164.items = []builder{&b10} - var b11 = sequenceBuilder{id: 11, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b21 = charBuilder{} - b11.items = []builder{&b21} + var b148 = choiceBuilder{id: 148, commit: 66} + var b109 = sequenceBuilder{id: 109, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b52 = charBuilder{} + b109.items = []builder{&b52} + var b24 = sequenceBuilder{id: 24, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b147 = charBuilder{} + b24.items = []builder{&b147} + var b15 = sequenceBuilder{id: 15, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b77 = charBuilder{} + b15.items = []builder{&b77} + var b33 = sequenceBuilder{id: 33, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b37 = charBuilder{} + b33.items = []builder{&b37} var b45 = sequenceBuilder{id: 45, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b159 = charBuilder{} - b45.items = []builder{&b159} - var b25 = sequenceBuilder{id: 25, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b66 = charBuilder{} - b25.items = []builder{&b66} - var b67 = sequenceBuilder{id: 67, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b12 = charBuilder{} - b67.items = []builder{&b12} - var b117 = sequenceBuilder{id: 117, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b22 = charBuilder{} - b117.items = []builder{&b22} - b112.options = []builder{&b137, &b164, &b11, &b45, &b25, &b67, &b117} - var b18 = sequenceBuilder{id: 18, commit: 72, name: "comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} - var b34 = choiceBuilder{id: 34, commit: 74} - var b101 = sequenceBuilder{id: 101, commit: 74, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} - var b17 = sequenceBuilder{id: 17, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b118 = charBuilder{} - var b6 = charBuilder{} - b17.items = []builder{&b118, &b6} - var b119 = sequenceBuilder{id: 119, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b165 = charBuilder{} - b119.items = []builder{&b165} - b101.items = []builder{&b17, &b119} - var b68 = sequenceBuilder{id: 68, commit: 74, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}} - var b16 = sequenceBuilder{id: 16, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b148 = charBuilder{} - var b46 = charBuilder{} - b16.items = []builder{&b148, &b46} - var b23 = choiceBuilder{id: 23, commit: 10} - var b129 = sequenceBuilder{id: 129, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b56 = sequenceBuilder{id: 56, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b100 = charBuilder{} - b56.items = []builder{&b100} + var b129 = charBuilder{} + b45.items = []builder{&b129} var b5 = sequenceBuilder{id: 5, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b84 = charBuilder{} + b5.items = []builder{&b84} + var b85 = sequenceBuilder{id: 85, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b25 = charBuilder{} + b85.items = []builder{&b25} + b148.options = []builder{&b109, &b24, &b15, &b33, &b45, &b5, &b85} + var b103 = sequenceBuilder{id: 103, commit: 72, name: "comment", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} + var b110 = choiceBuilder{id: 110, commit: 74} + var b34 = sequenceBuilder{id: 34, commit: 74, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} + var b53 = sequenceBuilder{id: 53, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b17 = charBuilder{} var b47 = charBuilder{} - b5.items = []builder{&b47} - b129.items = []builder{&b56, &b5} - var b125 = sequenceBuilder{id: 125, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b183 = charBuilder{} - b125.items = []builder{&b183} - b23.options = []builder{&b129, &b125} - var b121 = sequenceBuilder{id: 121, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b57 = charBuilder{} - var b92 = charBuilder{} - b121.items = []builder{&b57, &b92} - b68.items = []builder{&b16, &b23, &b121} - b34.options = []builder{&b101, &b68} - var b41 = sequenceBuilder{id: 41, commit: 10, ranges: [][]int{{0, -1}, {0, 1}, {0, -1}, {1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}}} - var b87 = choiceBuilder{id: 87, commit: 74} - var b102 = sequenceBuilder{id: 102, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b149 = charBuilder{} - b102.items = []builder{&b149} - var b76 = sequenceBuilder{id: 76, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b138 = charBuilder{} - b76.items = []builder{&b138} - var b40 = sequenceBuilder{id: 40, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b61 = charBuilder{} - b40.items = []builder{&b61} - var b95 = sequenceBuilder{id: 95, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + b53.items = []builder{&b17, &b47} + var b119 = sequenceBuilder{id: 119, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} var b150 = charBuilder{} - b95.items = []builder{&b150} + b119.items = []builder{&b150} + b34.items = []builder{&b53, &b119} + var b73 = sequenceBuilder{id: 73, commit: 74, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}} + var b46 = sequenceBuilder{id: 46, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b130 = charBuilder{} + var b101 = charBuilder{} + b46.items = []builder{&b130, &b101} + var b131 = choiceBuilder{id: 131, commit: 10} + var b161 = sequenceBuilder{id: 161, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} var b62 = sequenceBuilder{id: 62, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b93 = charBuilder{} - b62.items = []builder{&b93} - var b107 = sequenceBuilder{id: 107, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b19 = charBuilder{} - b107.items = []builder{&b19} - b87.options = []builder{&b102, &b76, &b40, &b95, &b62, &b107} - var b169 = sequenceBuilder{id: 169, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b143 = charBuilder{} - b169.items = []builder{&b143} - b41.items = []builder{&b87, &b169, &b87, &b34} - b18.items = []builder{&b34, &b41} - b185.options = []builder{&b112, &b18} + var b61 = charBuilder{} + b62.items = []builder{&b61} + var b118 = sequenceBuilder{id: 118, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b72 = charBuilder{} + b118.items = []builder{&b72} + b161.items = []builder{&b62, &b118} + var b78 = sequenceBuilder{id: 78, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b95 = charBuilder{} + b78.items = []builder{&b95} + b131.options = []builder{&b161, &b78} + var b140 = sequenceBuilder{id: 140, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b96 = charBuilder{} + var b16 = charBuilder{} + b140.items = []builder{&b96, &b16} + b73.items = []builder{&b46, &b131, &b140} + b110.options = []builder{&b34, &b73} + var b31 = sequenceBuilder{id: 31, commit: 10, ranges: [][]int{{0, -1}, {0, 1}, {0, -1}, {1, 1}, {0, -1}, {0, 1}, {0, -1}, {1, 1}}} + var b111 = choiceBuilder{id: 111, commit: 74} + var b26 = sequenceBuilder{id: 26, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b182 = charBuilder{} + b26.items = []builder{&b182} + var b124 = sequenceBuilder{id: 124, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b10 = charBuilder{} + b124.items = []builder{&b10} + var b30 = sequenceBuilder{id: 30, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b29 = charBuilder{} + b30.items = []builder{&b29} + var b133 = sequenceBuilder{id: 133, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b40 = charBuilder{} + b133.items = []builder{&b40} + var b102 = sequenceBuilder{id: 102, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b41 = charBuilder{} + b102.items = []builder{&b41} + var b149 = sequenceBuilder{id: 149, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b35 = charBuilder{} + b149.items = []builder{&b35} + b111.options = []builder{&b26, &b124, &b30, &b133, &b102, &b149} + var b141 = sequenceBuilder{id: 141, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b162 = charBuilder{} + b141.items = []builder{&b162} + b31.items = []builder{&b111, &b141, &b111, &b110} + b103.items = []builder{&b110, &b31} + b185.options = []builder{&b148, &b103} b186.options = []builder{&b185} var b187 = sequenceBuilder{id: 187, commit: 66, ranges: [][]int{{0, 1}, {0, -1}, {0, 1}, {0, 1}}} - var b31 = sequenceBuilder{id: 31, commit: 2, ranges: [][]int{{1, 1}, {0, -1}}} - var b174 = sequenceBuilder{id: 174, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b9 = charBuilder{} - b174.items = []builder{&b9} - var b30 = sequenceBuilder{id: 30, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - b30.items = []builder{&b186, &b174} - b31.items = []builder{&b174, &b30} - var b142 = sequenceBuilder{id: 142, commit: 66, ranges: [][]int{{1, 1}, {0, 1}}} - var b173 = sequenceBuilder{id: 173, commit: 64, name: "definition", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} - var b71 = sequenceBuilder{id: 71, commit: 74, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} - var b28 = sequenceBuilder{id: 28, commit: 72, name: "symbol", ranges: [][]int{{1, -1}, {1, -1}}} - var b177 = sequenceBuilder{id: 177, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b79 = charBuilder{} - b177.items = []builder{&b79} - b28.items = []builder{&b177} - var b86 = sequenceBuilder{id: 86, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b85 = sequenceBuilder{id: 85, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b152 = charBuilder{} - b85.items = []builder{&b152} - var b151 = choiceBuilder{id: 151, commit: 66} - var b50 = sequenceBuilder{id: 50, 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 b81 = charBuilder{} - var b14 = charBuilder{} - var b97 = charBuilder{} - var b35 = charBuilder{} - var b171 = charBuilder{} - b50.items = []builder{&b81, &b14, &b97, &b35, &b171} - var b69 = sequenceBuilder{id: 69, commit: 72, name: "ws", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b116 = charBuilder{} - var b98 = charBuilder{} - b69.items = []builder{&b116, &b98} - var b84 = sequenceBuilder{id: 84, 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 b99 = charBuilder{} - var b90 = charBuilder{} - var b106 = charBuilder{} - var b126 = charBuilder{} - b84.items = []builder{&b99, &b90, &b106, &b126} - var b172 = sequenceBuilder{id: 172, 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 b180 = charBuilder{} - var b135 = charBuilder{} - var b163 = charBuilder{} - var b15 = charBuilder{} - var b127 = charBuilder{} - var b70 = charBuilder{} - var b60 = charBuilder{} - var b167 = charBuilder{} - b172.items = []builder{&b180, &b135, &b163, &b15, &b127, &b70, &b60, &b167} - var b36 = sequenceBuilder{id: 36, 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 b128 = charBuilder{} - var b103 = charBuilder{} - var b136 = charBuilder{} - b36.items = []builder{&b147, &b128, &b103, &b136} - b151.options = []builder{&b50, &b69, &b84, &b172, &b36} - b86.items = []builder{&b85, &b151} - b71.items = []builder{&b28, &b86} + var b164 = sequenceBuilder{id: 164, commit: 2, ranges: [][]int{{1, 1}, {0, -1}}} var b181 = sequenceBuilder{id: 181, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b104 = charBuilder{} - b181.items = []builder{&b104} - var b162 = choiceBuilder{id: 162, commit: 66} - var b130 = choiceBuilder{id: 130, commit: 66} - var b58 = sequenceBuilder{id: 58, commit: 72, name: "any-char", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b113 = charBuilder{} - b58.items = []builder{&b113} - var b114 = sequenceBuilder{id: 114, commit: 72, name: "char-class", ranges: [][]int{{1, 1}, {0, 1}, {0, -1}, {1, 1}, {1, 1}, {0, 1}, {0, -1}, {1, 1}}} - var b73 = sequenceBuilder{id: 73, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b160 = charBuilder{} - b73.items = []builder{&b160} - var b175 = sequenceBuilder{id: 175, commit: 72, name: "class-not", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b108 = charBuilder{} - b175.items = []builder{&b108} - var b48 = choiceBuilder{id: 48, commit: 10} - var b37 = choiceBuilder{id: 37, commit: 72, name: "class-char"} - var b176 = sequenceBuilder{id: 176, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b88 = charBuilder{} - b176.items = []builder{&b88} - var b89 = sequenceBuilder{id: 89, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b42 = sequenceBuilder{id: 42, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b7 = charBuilder{} - b42.items = []builder{&b7} - var b139 = sequenceBuilder{id: 139, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b144 = charBuilder{} - b139.items = []builder{&b144} - b89.items = []builder{&b42, &b139} - b37.options = []builder{&b176, &b89} - var b82 = sequenceBuilder{id: 82, commit: 72, name: "char-range", ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b8 = sequenceBuilder{id: 8, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b145 = charBuilder{} - b8.items = []builder{&b145} - b82.items = []builder{&b37, &b8, &b37} - b48.options = []builder{&b37, &b82} - var b38 = sequenceBuilder{id: 38, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b51 = charBuilder{} - b38.items = []builder{&b51} - b114.items = []builder{&b73, &b175, &b48, &b38} - var b2 = sequenceBuilder{id: 2, commit: 72, name: "char-sequence", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}} - var b1 = sequenceBuilder{id: 1, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b26 = charBuilder{} - b1.items = []builder{&b26} - var b96 = choiceBuilder{id: 96, commit: 72, name: "sequence-char"} - var b77 = sequenceBuilder{id: 77, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b20 = charBuilder{} - b77.items = []builder{&b20} - var b75 = sequenceBuilder{id: 75, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} - var b49 = sequenceBuilder{id: 49, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b74 = charBuilder{} - b49.items = []builder{&b74} - var b154 = sequenceBuilder{id: 154, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b132 = charBuilder{} - b154.items = []builder{&b132} - b75.items = []builder{&b49, &b154} - b96.options = []builder{&b77, &b75} - var b155 = sequenceBuilder{id: 155, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b94 = charBuilder{} - b155.items = []builder{&b94} - b2.items = []builder{&b1, &b96, &b155} - b130.options = []builder{&b58, &b114, &b2} - var b27 = sequenceBuilder{id: 27, commit: 66, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} - var b166 = sequenceBuilder{id: 166, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b110 = charBuilder{} - b166.items = []builder{&b110} - var b83 = sequenceBuilder{id: 83, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b52 = charBuilder{} - b83.items = []builder{&b52} - b27.items = []builder{&b166, &b186, &b162, &b186, &b83} - var b124 = sequenceBuilder{id: 124, commit: 64, name: "sequence", ranges: [][]int{{1, 1}, {0, -1}}} - var b65 = sequenceBuilder{id: 65, commit: 72, name: "item", ranges: [][]int{{1, 1}, {0, 1}, {1, 1}, {0, 1}}} - var b44 = choiceBuilder{id: 44, commit: 10} - b44.options = []builder{&b130, &b28, &b27} - var b29 = choiceBuilder{id: 29, commit: 66} - var b161 = sequenceBuilder{id: 161, commit: 64, name: "count-quantifier", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} - var b156 = sequenceBuilder{id: 156, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b170 = charBuilder{} - b156.items = []builder{&b170} - var b53 = sequenceBuilder{id: 53, commit: 64, name: "count", ranges: [][]int{{1, 1}}} - var b146 = sequenceBuilder{id: 146, commit: 74, ranges: [][]int{{1, -1}, {1, -1}}} - var b63 = sequenceBuilder{id: 63, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b133 = charBuilder{} - b63.items = []builder{&b133} - b146.items = []builder{&b63} - b53.items = []builder{&b146} - var b39 = sequenceBuilder{id: 39, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b64 = charBuilder{} - b39.items = []builder{&b64} - b161.items = []builder{&b156, &b186, &b53, &b186, &b39} - var b122 = sequenceBuilder{id: 122, 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 b13 = sequenceBuilder{id: 13, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b115 = charBuilder{} - b13.items = []builder{&b115} - var b80 = sequenceBuilder{id: 80, commit: 64, name: "range-from", ranges: [][]int{{1, 1}}} - b80.items = []builder{&b146} - var b55 = sequenceBuilder{id: 55, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b54 = charBuilder{} - b55.items = []builder{&b54} - var b43 = sequenceBuilder{id: 43, commit: 64, name: "range-to", ranges: [][]int{{1, 1}}} - b43.items = []builder{&b146} - var b78 = sequenceBuilder{id: 78, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b157 = charBuilder{} - b78.items = []builder{&b157} - b122.items = []builder{&b13, &b186, &b80, &b186, &b55, &b186, &b43, &b186, &b78} - var b109 = sequenceBuilder{id: 109, commit: 72, name: "one-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b111 = charBuilder{} - b109.items = []builder{&b111} - var b105 = sequenceBuilder{id: 105, commit: 72, name: "zero-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b131 = charBuilder{} - b105.items = []builder{&b131} - var b72 = sequenceBuilder{id: 72, commit: 72, name: "zero-or-one", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b59 = charBuilder{} - b72.items = []builder{&b59} - b29.options = []builder{&b161, &b122, &b109, &b105, &b72} - b65.items = []builder{&b44, &b29} - var b123 = sequenceBuilder{id: 123, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - b123.items = []builder{&b186, &b65} - b124.items = []builder{&b65, &b123} - var b179 = sequenceBuilder{id: 179, commit: 64, name: "choice", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} - var b184 = choiceBuilder{id: 184, commit: 66} - b184.options = []builder{&b130, &b28, &b27, &b124} - var b158 = sequenceBuilder{id: 158, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}}} - var b24 = sequenceBuilder{id: 24, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b154 = charBuilder{} + b181.items = []builder{&b154} + var b163 = sequenceBuilder{id: 163, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + b163.items = []builder{&b186, &b181} + b164.items = []builder{&b181, &b163} + var b117 = sequenceBuilder{id: 117, commit: 66, ranges: [][]int{{1, 1}, {0, 1}}} + var b18 = sequenceBuilder{id: 18, commit: 64, name: "definition", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} + var b114 = sequenceBuilder{id: 114, commit: 74, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} + var b93 = sequenceBuilder{id: 93, commit: 72, name: "symbol", ranges: [][]int{{1, -1}, {1, -1}}} + var b80 = sequenceBuilder{id: 80, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b107 = charBuilder{} + b80.items = []builder{&b107} + b93.items = []builder{&b80} + var b83 = sequenceBuilder{id: 83, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b71 = sequenceBuilder{id: 71, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b70 = charBuilder{} + b71.items = []builder{&b70} + var b4 = choiceBuilder{id: 4, commit: 66} + var b56 = sequenceBuilder{id: 56, 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 b134 = charBuilder{} - b24.items = []builder{&b134} - b158.items = []builder{&b24, &b186, &b184} - var b178 = sequenceBuilder{id: 178, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - b178.items = []builder{&b186, &b158} - b179.items = []builder{&b184, &b186, &b158, &b178} - b162.options = []builder{&b130, &b28, &b27, &b124, &b179} - b173.items = []builder{&b71, &b186, &b181, &b186, &b162} - var b141 = sequenceBuilder{id: 141, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} - var b4 = sequenceBuilder{id: 4, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {0, -1}, {1, 1}}} - var b91 = sequenceBuilder{id: 91, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b153 = charBuilder{} - b91.items = []builder{&b153} - var b3 = sequenceBuilder{id: 3, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - b3.items = []builder{&b186, &b91} - b4.items = []builder{&b91, &b3, &b186, &b173} - var b140 = sequenceBuilder{id: 140, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - b140.items = []builder{&b186, &b4} - b141.items = []builder{&b186, &b4, &b140} - b142.items = []builder{&b173, &b141} - var b33 = sequenceBuilder{id: 33, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} + var b64 = charBuilder{} + var b170 = charBuilder{} + var b99 = charBuilder{} + var b123 = charBuilder{} + b56.items = []builder{&b134, &b64, &b170, &b99, &b123} + var b22 = sequenceBuilder{id: 22, commit: 72, name: "ws", allChars: true, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b184 = charBuilder{} + var b174 = charBuilder{} + b22.items = []builder{&b184, &b174} + var b57 = sequenceBuilder{id: 57, 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 b23 = charBuilder{} + var b135 = charBuilder{} + var b159 = charBuilder{} + var b54 = charBuilder{} + b57.items = []builder{&b23, &b135, &b159, &b54} + var b51 = sequenceBuilder{id: 51, 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 b50 = charBuilder{} + var b60 = charBuilder{} + var b178 = charBuilder{} + var b89 = charBuilder{} + var b69 = charBuilder{} + var b175 = charBuilder{} + var b138 = charBuilder{} + var b113 = charBuilder{} + b51.items = []builder{&b50, &b60, &b178, &b89, &b69, &b175, &b138, &b113} + var b28 = sequenceBuilder{id: 28, 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 b9 = charBuilder{} + var b100 = charBuilder{} + var b160 = charBuilder{} + var b76 = charBuilder{} + b28.items = []builder{&b9, &b100, &b160, &b76} + b4.options = []builder{&b56, &b22, &b57, &b51, &b28} + b83.items = []builder{&b71, &b4} + b114.items = []builder{&b93, &b83} + var b49 = sequenceBuilder{id: 49, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b132 = charBuilder{} + b49.items = []builder{&b132} + var b59 = choiceBuilder{id: 59, commit: 66} + var b136 = choiceBuilder{id: 136, commit: 66} + var b6 = sequenceBuilder{id: 6, commit: 72, name: "any-char", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b104 = charBuilder{} + b6.items = []builder{&b104} + var b75 = sequenceBuilder{id: 75, commit: 72, name: "char-class", ranges: [][]int{{1, 1}, {0, 1}, {0, -1}, {1, 1}, {1, 1}, {0, 1}, {0, -1}, {1, 1}}} + var b86 = sequenceBuilder{id: 86, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b105 = charBuilder{} + b86.items = []builder{&b105} + var b79 = sequenceBuilder{id: 79, commit: 72, name: "class-not", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b171 = charBuilder{} + b79.items = []builder{&b171} + var b125 = choiceBuilder{id: 125, commit: 10} + var b157 = choiceBuilder{id: 157, commit: 72, name: "class-char"} + var b7 = sequenceBuilder{id: 7, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b90 = charBuilder{} + b7.items = []builder{&b90} + var b173 = sequenceBuilder{id: 173, 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 b155 = charBuilder{} + b172.items = []builder{&b155} + var b183 = sequenceBuilder{id: 183, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b156 = charBuilder{} + b183.items = []builder{&b156} + b173.items = []builder{&b172, &b183} + b157.options = []builder{&b7, &b173} + var b91 = sequenceBuilder{id: 91, commit: 72, name: "char-range", ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}} var b120 = sequenceBuilder{id: 120, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} - var b168 = charBuilder{} - b120.items = []builder{&b168} - var b32 = sequenceBuilder{id: 32, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} - b32.items = []builder{&b186, &b120} - b33.items = []builder{&b186, &b120, &b32} - b187.items = []builder{&b31, &b186, &b142, &b33} + var b74 = charBuilder{} + b120.items = []builder{&b74} + b91.items = []builder{&b157, &b120, &b157} + b125.options = []builder{&b157, &b91} + var b1 = sequenceBuilder{id: 1, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b112 = charBuilder{} + b1.items = []builder{&b112} + b75.items = []builder{&b86, &b79, &b125, &b1} + var b2 = sequenceBuilder{id: 2, commit: 72, name: "char-sequence", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {1, 1}, {0, -1}, {1, 1}}} + var b127 = sequenceBuilder{id: 127, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b97 = charBuilder{} + b127.items = []builder{&b97} + var b43 = choiceBuilder{id: 43, commit: 72, name: "sequence-char"} + var b142 = sequenceBuilder{id: 142, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b92 = charBuilder{} + b142.items = []builder{&b92} + var b19 = sequenceBuilder{id: 19, commit: 10, ranges: [][]int{{1, 1}, {1, 1}, {1, 1}, {1, 1}}} + var b42 = sequenceBuilder{id: 42, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b38 = charBuilder{} + b42.items = []builder{&b38} + var b87 = sequenceBuilder{id: 87, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b106 = charBuilder{} + b87.items = []builder{&b106} + b19.items = []builder{&b42, &b87} + b43.options = []builder{&b142, &b19} + var b11 = sequenceBuilder{id: 11, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b20 = charBuilder{} + b11.items = []builder{&b20} + b2.items = []builder{&b127, &b43, &b11} + b136.options = []builder{&b6, &b75, &b2} + var b167 = sequenceBuilder{id: 167, commit: 66, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} + var b126 = sequenceBuilder{id: 126, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b151 = charBuilder{} + b126.items = []builder{&b151} + var b12 = sequenceBuilder{id: 12, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b176 = charBuilder{} + b12.items = []builder{&b176} + b167.items = []builder{&b126, &b186, &b59, &b186, &b12} + var b146 = sequenceBuilder{id: 146, commit: 64, name: "sequence", ranges: [][]int{{1, 1}, {0, -1}}} + var b68 = sequenceBuilder{id: 68, commit: 72, name: "item", ranges: [][]int{{1, 1}, {0, 1}, {1, 1}, {0, 1}}} + var b88 = choiceBuilder{id: 88, commit: 10} + b88.options = []builder{&b136, &b93, &b167} + var b122 = choiceBuilder{id: 122, commit: 66} + var b108 = sequenceBuilder{id: 108, commit: 64, name: "count-quantifier", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}, {1, 1}}} + var b44 = sequenceBuilder{id: 44, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b128 = charBuilder{} + b44.items = []builder{&b128} + var b27 = sequenceBuilder{id: 27, commit: 64, name: "count", ranges: [][]int{{1, 1}}} + var b98 = sequenceBuilder{id: 98, commit: 74, ranges: [][]int{{1, -1}, {1, -1}}} + var b121 = sequenceBuilder{id: 121, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b143 = charBuilder{} + b121.items = []builder{&b143} + b98.items = []builder{&b121} + b27.items = []builder{&b98} + var b63 = sequenceBuilder{id: 63, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b55 = charBuilder{} + b63.items = []builder{&b55} + b108.items = []builder{&b44, &b186, &b27, &b186, &b63} + var b81 = sequenceBuilder{id: 81, 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 b21 = sequenceBuilder{id: 21, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b8 = charBuilder{} + b21.items = []builder{&b8} + var b65 = sequenceBuilder{id: 65, commit: 64, name: "range-from", ranges: [][]int{{1, 1}}} + b65.items = []builder{&b98} + var b58 = sequenceBuilder{id: 58, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b153 = charBuilder{} + b58.items = []builder{&b153} + var b152 = sequenceBuilder{id: 152, commit: 64, name: "range-to", ranges: [][]int{{1, 1}}} + b152.items = []builder{&b98} + var b48 = sequenceBuilder{id: 48, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b158 = charBuilder{} + b48.items = []builder{&b158} + b81.items = []builder{&b21, &b186, &b65, &b186, &b58, &b186, &b152, &b186, &b48} + var b82 = sequenceBuilder{id: 82, commit: 72, name: "one-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b144 = charBuilder{} + b82.items = []builder{&b144} + var b13 = sequenceBuilder{id: 13, commit: 72, name: "zero-or-more", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b137 = charBuilder{} + b13.items = []builder{&b137} + var b3 = sequenceBuilder{id: 3, commit: 72, name: "zero-or-one", allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b14 = charBuilder{} + b3.items = []builder{&b14} + b122.options = []builder{&b108, &b81, &b82, &b13, &b3} + b68.items = []builder{&b88, &b122} + var b145 = sequenceBuilder{id: 145, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + b145.items = []builder{&b186, &b68} + b146.items = []builder{&b68, &b145} + var b169 = sequenceBuilder{id: 169, commit: 64, name: "choice", ranges: [][]int{{1, 1}, {0, -1}, {1, 1}, {0, -1}}} + var b39 = choiceBuilder{id: 39, commit: 66} + b39.options = []builder{&b136, &b93, &b167, &b146} + var b177 = sequenceBuilder{id: 177, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {1, 1}}} + var b67 = sequenceBuilder{id: 67, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b66 = charBuilder{} + b67.items = []builder{&b66} + b177.items = []builder{&b67, &b186, &b39} + var b168 = sequenceBuilder{id: 168, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + b168.items = []builder{&b186, &b177} + b169.items = []builder{&b39, &b186, &b177, &b168} + b59.options = []builder{&b136, &b93, &b167, &b146, &b169} + b18.items = []builder{&b114, &b186, &b49, &b186, &b59} + var b116 = sequenceBuilder{id: 116, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} + var b180 = sequenceBuilder{id: 180, commit: 2, ranges: [][]int{{1, 1}, {0, -1}, {0, -1}, {1, 1}}} + var b36 = sequenceBuilder{id: 36, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b32 = charBuilder{} + b36.items = []builder{&b32} + var b179 = sequenceBuilder{id: 179, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + b179.items = []builder{&b186, &b36} + b180.items = []builder{&b36, &b179, &b186, &b18} + var b115 = sequenceBuilder{id: 115, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + b115.items = []builder{&b186, &b180} + b116.items = []builder{&b186, &b180, &b115} + b117.items = []builder{&b18, &b116} + var b166 = sequenceBuilder{id: 166, commit: 2, ranges: [][]int{{0, -1}, {1, 1}, {0, -1}}} + var b139 = sequenceBuilder{id: 139, commit: 10, allChars: true, ranges: [][]int{{1, 1}, {1, 1}}} + var b94 = charBuilder{} + b139.items = []builder{&b94} + var b165 = sequenceBuilder{id: 165, commit: 2, ranges: [][]int{{0, -1}, {1, 1}}} + b165.items = []builder{&b186, &b139} + b166.items = []builder{&b186, &b139, &b165} + b187.items = []builder{&b164, &b186, &b117, &b166} b188.items = []builder{&b186, &b187, &b186} return parseInput(r, &p188, &b188)