summaryrefslogtreecommitdiff
path: root/src/util/fipstools/acvp/acvptool/parser.peg.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/fipstools/acvp/acvptool/parser.peg.go')
-rw-r--r--src/util/fipstools/acvp/acvptool/parser.peg.go1334
1 files changed, 1334 insertions, 0 deletions
diff --git a/src/util/fipstools/acvp/acvptool/parser.peg.go b/src/util/fipstools/acvp/acvptool/parser.peg.go
new file mode 100644
index 00000000..c80a7dca
--- /dev/null
+++ b/src/util/fipstools/acvp/acvptool/parser.peg.go
@@ -0,0 +1,1334 @@
+package main
+
+import (
+ "fmt"
+ "math"
+ "sort"
+ "strconv"
+)
+
+const endSymbol rune = 1114112
+
+/* The rule types inferred from the grammar are below. */
+type pegRule uint8
+
+const (
+ ruleUnknown pegRule = iota
+ ruleStatement
+ ruleAssignment
+ ruleVariable
+ ruleExpression
+ ruleStringLiteral
+ ruleQuotedText
+ ruleEscapedChar
+ ruleIndexing
+ ruleIndex
+ ruleSearch
+ ruleAction
+ ruleCommand
+ ruleFunction
+ ruleArgs
+ ruleQuery
+ ruleConjunctions
+ ruleConjunction
+ ruleField
+ ruleRelation
+ ruleWS
+)
+
+var rul3s = [...]string{
+ "Unknown",
+ "Statement",
+ "Assignment",
+ "Variable",
+ "Expression",
+ "StringLiteral",
+ "QuotedText",
+ "EscapedChar",
+ "Indexing",
+ "Index",
+ "Search",
+ "Action",
+ "Command",
+ "Function",
+ "Args",
+ "Query",
+ "Conjunctions",
+ "Conjunction",
+ "Field",
+ "Relation",
+ "WS",
+}
+
+type token32 struct {
+ pegRule
+ begin, end uint32
+}
+
+func (t *token32) String() string {
+ return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end)
+}
+
+type node32 struct {
+ token32
+ up, next *node32
+}
+
+func (node *node32) print(pretty bool, buffer string) {
+ var print func(node *node32, depth int)
+ print = func(node *node32, depth int) {
+ for node != nil {
+ for c := 0; c < depth; c++ {
+ fmt.Printf(" ")
+ }
+ rule := rul3s[node.pegRule]
+ quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
+ if !pretty {
+ fmt.Printf("%v %v\n", rule, quote)
+ } else {
+ fmt.Printf("\x1B[34m%v\x1B[m %v\n", rule, quote)
+ }
+ if node.up != nil {
+ print(node.up, depth+1)
+ }
+ node = node.next
+ }
+ }
+ print(node, 0)
+}
+
+func (node *node32) Print(buffer string) {
+ node.print(false, buffer)
+}
+
+func (node *node32) PrettyPrint(buffer string) {
+ node.print(true, buffer)
+}
+
+type tokens32 struct {
+ tree []token32
+}
+
+func (t *tokens32) Trim(length uint32) {
+ t.tree = t.tree[:length]
+}
+
+func (t *tokens32) Print() {
+ for _, token := range t.tree {
+ fmt.Println(token.String())
+ }
+}
+
+func (t *tokens32) AST() *node32 {
+ type element struct {
+ node *node32
+ down *element
+ }
+ tokens := t.Tokens()
+ var stack *element
+ for _, token := range tokens {
+ if token.begin == token.end {
+ continue
+ }
+ node := &node32{token32: token}
+ for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end {
+ stack.node.next = node.up
+ node.up = stack.node
+ stack = stack.down
+ }
+ stack = &element{node: node, down: stack}
+ }
+ if stack != nil {
+ return stack.node
+ }
+ return nil
+}
+
+func (t *tokens32) PrintSyntaxTree(buffer string) {
+ t.AST().Print(buffer)
+}
+
+func (t *tokens32) PrettyPrintSyntaxTree(buffer string) {
+ t.AST().PrettyPrint(buffer)
+}
+
+func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
+ if tree := t.tree; int(index) >= len(tree) {
+ expanded := make([]token32, 2*len(tree))
+ copy(expanded, tree)
+ t.tree = expanded
+ }
+ t.tree[index] = token32{
+ pegRule: rule,
+ begin: begin,
+ end: end,
+ }
+}
+
+func (t *tokens32) Tokens() []token32 {
+ return t.tree
+}
+
+type Statement struct {
+ Buffer string
+ buffer []rune
+ rules [21]func() bool
+ parse func(rule ...int) error
+ reset func()
+ Pretty bool
+ tokens32
+}
+
+func (p *Statement) Parse(rule ...int) error {
+ return p.parse(rule...)
+}
+
+func (p *Statement) Reset() {
+ p.reset()
+}
+
+type textPosition struct {
+ line, symbol int
+}
+
+type textPositionMap map[int]textPosition
+
+func translatePositions(buffer []rune, positions []int) textPositionMap {
+ length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0
+ sort.Ints(positions)
+
+search:
+ for i, c := range buffer {
+ if c == '\n' {
+ line, symbol = line+1, 0
+ } else {
+ symbol++
+ }
+ if i == positions[j] {
+ translations[positions[j]] = textPosition{line, symbol}
+ for j++; j < length; j++ {
+ if i != positions[j] {
+ continue search
+ }
+ }
+ break search
+ }
+ }
+
+ return translations
+}
+
+type parseError struct {
+ p *Statement
+ max token32
+}
+
+func (e *parseError) Error() string {
+ tokens, error := []token32{e.max}, "\n"
+ positions, p := make([]int, 2*len(tokens)), 0
+ for _, token := range tokens {
+ positions[p], p = int(token.begin), p+1
+ positions[p], p = int(token.end), p+1
+ }
+ translations := translatePositions(e.p.buffer, positions)
+ format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n"
+ if e.p.Pretty {
+ format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n"
+ }
+ for _, token := range tokens {
+ begin, end := int(token.begin), int(token.end)
+ error += fmt.Sprintf(format,
+ rul3s[token.pegRule],
+ translations[begin].line, translations[begin].symbol,
+ translations[end].line, translations[end].symbol,
+ strconv.Quote(string(e.p.buffer[begin:end])))
+ }
+
+ return error
+}
+
+func (p *Statement) PrintSyntaxTree() {
+ if p.Pretty {
+ p.tokens32.PrettyPrintSyntaxTree(p.Buffer)
+ } else {
+ p.tokens32.PrintSyntaxTree(p.Buffer)
+ }
+}
+
+func (p *Statement) Init() {
+ var (
+ max token32
+ position, tokenIndex uint32
+ buffer []rune
+ )
+ p.reset = func() {
+ max = token32{}
+ position, tokenIndex = 0, 0
+
+ p.buffer = []rune(p.Buffer)
+ if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol {
+ p.buffer = append(p.buffer, endSymbol)
+ }
+ buffer = p.buffer
+ }
+ p.reset()
+
+ _rules := p.rules
+ tree := tokens32{tree: make([]token32, math.MaxInt16)}
+ p.parse = func(rule ...int) error {
+ r := 1
+ if len(rule) > 0 {
+ r = rule[0]
+ }
+ matches := p.rules[r]()
+ p.tokens32 = tree
+ if matches {
+ p.Trim(tokenIndex)
+ return nil
+ }
+ return &parseError{p, max}
+ }
+
+ add := func(rule pegRule, begin uint32) {
+ tree.Add(rule, begin, position, tokenIndex)
+ tokenIndex++
+ if begin != position && position > max.end {
+ max = token32{rule, begin, position}
+ }
+ }
+
+ matchDot := func() bool {
+ if buffer[position] != endSymbol {
+ position++
+ return true
+ }
+ return false
+ }
+
+ /*matchChar := func(c byte) bool {
+ if buffer[position] == c {
+ position++
+ return true
+ }
+ return false
+ }*/
+
+ /*matchRange := func(lower byte, upper byte) bool {
+ if c := buffer[position]; c >= lower && c <= upper {
+ position++
+ return true
+ }
+ return false
+ }*/
+
+ _rules = [...]func() bool{
+ nil,
+ /* 0 Statement <- <(WS? (Assignment / Action / Expression) WS? !.)> */
+ func() bool {
+ position0, tokenIndex0 := position, tokenIndex
+ {
+ position1 := position
+ {
+ position2, tokenIndex2 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l2
+ }
+ goto l3
+ l2:
+ position, tokenIndex = position2, tokenIndex2
+ }
+ l3:
+ {
+ position4, tokenIndex4 := position, tokenIndex
+ if !_rules[ruleAssignment]() {
+ goto l5
+ }
+ goto l4
+ l5:
+ position, tokenIndex = position4, tokenIndex4
+ if !_rules[ruleAction]() {
+ goto l6
+ }
+ goto l4
+ l6:
+ position, tokenIndex = position4, tokenIndex4
+ if !_rules[ruleExpression]() {
+ goto l0
+ }
+ }
+ l4:
+ {
+ position7, tokenIndex7 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l7
+ }
+ goto l8
+ l7:
+ position, tokenIndex = position7, tokenIndex7
+ }
+ l8:
+ {
+ position9, tokenIndex9 := position, tokenIndex
+ if !matchDot() {
+ goto l9
+ }
+ goto l0
+ l9:
+ position, tokenIndex = position9, tokenIndex9
+ }
+ add(ruleStatement, position1)
+ }
+ return true
+ l0:
+ position, tokenIndex = position0, tokenIndex0
+ return false
+ },
+ /* 1 Assignment <- <(Variable WS? '=' WS? Expression)> */
+ func() bool {
+ position10, tokenIndex10 := position, tokenIndex
+ {
+ position11 := position
+ if !_rules[ruleVariable]() {
+ goto l10
+ }
+ {
+ position12, tokenIndex12 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l12
+ }
+ goto l13
+ l12:
+ position, tokenIndex = position12, tokenIndex12
+ }
+ l13:
+ if buffer[position] != rune('=') {
+ goto l10
+ }
+ position++
+ {
+ position14, tokenIndex14 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l14
+ }
+ goto l15
+ l14:
+ position, tokenIndex = position14, tokenIndex14
+ }
+ l15:
+ if !_rules[ruleExpression]() {
+ goto l10
+ }
+ add(ruleAssignment, position11)
+ }
+ return true
+ l10:
+ position, tokenIndex = position10, tokenIndex10
+ return false
+ },
+ /* 2 Variable <- <(([a-z] / [A-Z] / '_') ([a-z] / [A-Z] / [0-9] / '_')*)> */
+ func() bool {
+ position16, tokenIndex16 := position, tokenIndex
+ {
+ position17 := position
+ {
+ position18, tokenIndex18 := position, tokenIndex
+ if c := buffer[position]; c < rune('a') || c > rune('z') {
+ goto l19
+ }
+ position++
+ goto l18
+ l19:
+ position, tokenIndex = position18, tokenIndex18
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l20
+ }
+ position++
+ goto l18
+ l20:
+ position, tokenIndex = position18, tokenIndex18
+ if buffer[position] != rune('_') {
+ goto l16
+ }
+ position++
+ }
+ l18:
+ l21:
+ {
+ position22, tokenIndex22 := position, tokenIndex
+ {
+ position23, tokenIndex23 := position, tokenIndex
+ if c := buffer[position]; c < rune('a') || c > rune('z') {
+ goto l24
+ }
+ position++
+ goto l23
+ l24:
+ position, tokenIndex = position23, tokenIndex23
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l25
+ }
+ position++
+ goto l23
+ l25:
+ position, tokenIndex = position23, tokenIndex23
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l26
+ }
+ position++
+ goto l23
+ l26:
+ position, tokenIndex = position23, tokenIndex23
+ if buffer[position] != rune('_') {
+ goto l22
+ }
+ position++
+ }
+ l23:
+ goto l21
+ l22:
+ position, tokenIndex = position22, tokenIndex22
+ }
+ add(ruleVariable, position17)
+ }
+ return true
+ l16:
+ position, tokenIndex = position16, tokenIndex16
+ return false
+ },
+ /* 3 Expression <- <(StringLiteral / Indexing / Search / Variable)> */
+ func() bool {
+ position27, tokenIndex27 := position, tokenIndex
+ {
+ position28 := position
+ {
+ position29, tokenIndex29 := position, tokenIndex
+ if !_rules[ruleStringLiteral]() {
+ goto l30
+ }
+ goto l29
+ l30:
+ position, tokenIndex = position29, tokenIndex29
+ if !_rules[ruleIndexing]() {
+ goto l31
+ }
+ goto l29
+ l31:
+ position, tokenIndex = position29, tokenIndex29
+ if !_rules[ruleSearch]() {
+ goto l32
+ }
+ goto l29
+ l32:
+ position, tokenIndex = position29, tokenIndex29
+ if !_rules[ruleVariable]() {
+ goto l27
+ }
+ }
+ l29:
+ add(ruleExpression, position28)
+ }
+ return true
+ l27:
+ position, tokenIndex = position27, tokenIndex27
+ return false
+ },
+ /* 4 StringLiteral <- <('"' QuotedText '"')> */
+ func() bool {
+ position33, tokenIndex33 := position, tokenIndex
+ {
+ position34 := position
+ if buffer[position] != rune('"') {
+ goto l33
+ }
+ position++
+ if !_rules[ruleQuotedText]() {
+ goto l33
+ }
+ if buffer[position] != rune('"') {
+ goto l33
+ }
+ position++
+ add(ruleStringLiteral, position34)
+ }
+ return true
+ l33:
+ position, tokenIndex = position33, tokenIndex33
+ return false
+ },
+ /* 5 QuotedText <- <(EscapedChar / (!('\\' / '"') .))*> */
+ func() bool {
+ {
+ position36 := position
+ l37:
+ {
+ position38, tokenIndex38 := position, tokenIndex
+ {
+ position39, tokenIndex39 := position, tokenIndex
+ if !_rules[ruleEscapedChar]() {
+ goto l40
+ }
+ goto l39
+ l40:
+ position, tokenIndex = position39, tokenIndex39
+ {
+ position41, tokenIndex41 := position, tokenIndex
+ {
+ position42, tokenIndex42 := position, tokenIndex
+ if buffer[position] != rune('\\') {
+ goto l43
+ }
+ position++
+ goto l42
+ l43:
+ position, tokenIndex = position42, tokenIndex42
+ if buffer[position] != rune('"') {
+ goto l41
+ }
+ position++
+ }
+ l42:
+ goto l38
+ l41:
+ position, tokenIndex = position41, tokenIndex41
+ }
+ if !matchDot() {
+ goto l38
+ }
+ }
+ l39:
+ goto l37
+ l38:
+ position, tokenIndex = position38, tokenIndex38
+ }
+ add(ruleQuotedText, position36)
+ }
+ return true
+ },
+ /* 6 EscapedChar <- <('\\' ('\\' / 'n' / '"'))> */
+ func() bool {
+ position44, tokenIndex44 := position, tokenIndex
+ {
+ position45 := position
+ if buffer[position] != rune('\\') {
+ goto l44
+ }
+ position++
+ {
+ position46, tokenIndex46 := position, tokenIndex
+ if buffer[position] != rune('\\') {
+ goto l47
+ }
+ position++
+ goto l46
+ l47:
+ position, tokenIndex = position46, tokenIndex46
+ if buffer[position] != rune('n') {
+ goto l48
+ }
+ position++
+ goto l46
+ l48:
+ position, tokenIndex = position46, tokenIndex46
+ if buffer[position] != rune('"') {
+ goto l44
+ }
+ position++
+ }
+ l46:
+ add(ruleEscapedChar, position45)
+ }
+ return true
+ l44:
+ position, tokenIndex = position44, tokenIndex44
+ return false
+ },
+ /* 7 Indexing <- <(Variable ('[' Index ']')+)> */
+ func() bool {
+ position49, tokenIndex49 := position, tokenIndex
+ {
+ position50 := position
+ if !_rules[ruleVariable]() {
+ goto l49
+ }
+ if buffer[position] != rune('[') {
+ goto l49
+ }
+ position++
+ if !_rules[ruleIndex]() {
+ goto l49
+ }
+ if buffer[position] != rune(']') {
+ goto l49
+ }
+ position++
+ l51:
+ {
+ position52, tokenIndex52 := position, tokenIndex
+ if buffer[position] != rune('[') {
+ goto l52
+ }
+ position++
+ if !_rules[ruleIndex]() {
+ goto l52
+ }
+ if buffer[position] != rune(']') {
+ goto l52
+ }
+ position++
+ goto l51
+ l52:
+ position, tokenIndex = position52, tokenIndex52
+ }
+ add(ruleIndexing, position50)
+ }
+ return true
+ l49:
+ position, tokenIndex = position49, tokenIndex49
+ return false
+ },
+ /* 8 Index <- <([0-9] / [a-z])+> */
+ func() bool {
+ position53, tokenIndex53 := position, tokenIndex
+ {
+ position54 := position
+ {
+ position57, tokenIndex57 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l58
+ }
+ position++
+ goto l57
+ l58:
+ position, tokenIndex = position57, tokenIndex57
+ if c := buffer[position]; c < rune('a') || c > rune('z') {
+ goto l53
+ }
+ position++
+ }
+ l57:
+ l55:
+ {
+ position56, tokenIndex56 := position, tokenIndex
+ {
+ position59, tokenIndex59 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l60
+ }
+ position++
+ goto l59
+ l60:
+ position, tokenIndex = position59, tokenIndex59
+ if c := buffer[position]; c < rune('a') || c > rune('z') {
+ goto l56
+ }
+ position++
+ }
+ l59:
+ goto l55
+ l56:
+ position, tokenIndex = position56, tokenIndex56
+ }
+ add(ruleIndex, position54)
+ }
+ return true
+ l53:
+ position, tokenIndex = position53, tokenIndex53
+ return false
+ },
+ /* 9 Search <- <(Variable '[' WS? ('w' 'h' 'e' 'r' 'e') WS Query ']')> */
+ func() bool {
+ position61, tokenIndex61 := position, tokenIndex
+ {
+ position62 := position
+ if !_rules[ruleVariable]() {
+ goto l61
+ }
+ if buffer[position] != rune('[') {
+ goto l61
+ }
+ position++
+ {
+ position63, tokenIndex63 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l63
+ }
+ goto l64
+ l63:
+ position, tokenIndex = position63, tokenIndex63
+ }
+ l64:
+ if buffer[position] != rune('w') {
+ goto l61
+ }
+ position++
+ if buffer[position] != rune('h') {
+ goto l61
+ }
+ position++
+ if buffer[position] != rune('e') {
+ goto l61
+ }
+ position++
+ if buffer[position] != rune('r') {
+ goto l61
+ }
+ position++
+ if buffer[position] != rune('e') {
+ goto l61
+ }
+ position++
+ if !_rules[ruleWS]() {
+ goto l61
+ }
+ if !_rules[ruleQuery]() {
+ goto l61
+ }
+ if buffer[position] != rune(']') {
+ goto l61
+ }
+ position++
+ add(ruleSearch, position62)
+ }
+ return true
+ l61:
+ position, tokenIndex = position61, tokenIndex61
+ return false
+ },
+ /* 10 Action <- <(Expression '.' Command)> */
+ func() bool {
+ position65, tokenIndex65 := position, tokenIndex
+ {
+ position66 := position
+ if !_rules[ruleExpression]() {
+ goto l65
+ }
+ if buffer[position] != rune('.') {
+ goto l65
+ }
+ position++
+ if !_rules[ruleCommand]() {
+ goto l65
+ }
+ add(ruleAction, position66)
+ }
+ return true
+ l65:
+ position, tokenIndex = position65, tokenIndex65
+ return false
+ },
+ /* 11 Command <- <(Function '(' Args? ')')> */
+ func() bool {
+ position67, tokenIndex67 := position, tokenIndex
+ {
+ position68 := position
+ if !_rules[ruleFunction]() {
+ goto l67
+ }
+ if buffer[position] != rune('(') {
+ goto l67
+ }
+ position++
+ {
+ position69, tokenIndex69 := position, tokenIndex
+ if !_rules[ruleArgs]() {
+ goto l69
+ }
+ goto l70
+ l69:
+ position, tokenIndex = position69, tokenIndex69
+ }
+ l70:
+ if buffer[position] != rune(')') {
+ goto l67
+ }
+ position++
+ add(ruleCommand, position68)
+ }
+ return true
+ l67:
+ position, tokenIndex = position67, tokenIndex67
+ return false
+ },
+ /* 12 Function <- <([a-z] / [A-Z])+> */
+ func() bool {
+ position71, tokenIndex71 := position, tokenIndex
+ {
+ position72 := position
+ {
+ position75, tokenIndex75 := position, tokenIndex
+ if c := buffer[position]; c < rune('a') || c > rune('z') {
+ goto l76
+ }
+ position++
+ goto l75
+ l76:
+ position, tokenIndex = position75, tokenIndex75
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l71
+ }
+ position++
+ }
+ l75:
+ l73:
+ {
+ position74, tokenIndex74 := position, tokenIndex
+ {
+ position77, tokenIndex77 := position, tokenIndex
+ if c := buffer[position]; c < rune('a') || c > rune('z') {
+ goto l78
+ }
+ position++
+ goto l77
+ l78:
+ position, tokenIndex = position77, tokenIndex77
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l74
+ }
+ position++
+ }
+ l77:
+ goto l73
+ l74:
+ position, tokenIndex = position74, tokenIndex74
+ }
+ add(ruleFunction, position72)
+ }
+ return true
+ l71:
+ position, tokenIndex = position71, tokenIndex71
+ return false
+ },
+ /* 13 Args <- <(StringLiteral (WS? ',' WS? Args))> */
+ func() bool {
+ position79, tokenIndex79 := position, tokenIndex
+ {
+ position80 := position
+ if !_rules[ruleStringLiteral]() {
+ goto l79
+ }
+ {
+ position81, tokenIndex81 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l81
+ }
+ goto l82
+ l81:
+ position, tokenIndex = position81, tokenIndex81
+ }
+ l82:
+ if buffer[position] != rune(',') {
+ goto l79
+ }
+ position++
+ {
+ position83, tokenIndex83 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l83
+ }
+ goto l84
+ l83:
+ position, tokenIndex = position83, tokenIndex83
+ }
+ l84:
+ if !_rules[ruleArgs]() {
+ goto l79
+ }
+ add(ruleArgs, position80)
+ }
+ return true
+ l79:
+ position, tokenIndex = position79, tokenIndex79
+ return false
+ },
+ /* 14 Query <- <(Conjunctions (WS? ('|' '|') WS? Conjunctions)?)> */
+ func() bool {
+ position85, tokenIndex85 := position, tokenIndex
+ {
+ position86 := position
+ if !_rules[ruleConjunctions]() {
+ goto l85
+ }
+ {
+ position87, tokenIndex87 := position, tokenIndex
+ {
+ position89, tokenIndex89 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l89
+ }
+ goto l90
+ l89:
+ position, tokenIndex = position89, tokenIndex89
+ }
+ l90:
+ if buffer[position] != rune('|') {
+ goto l87
+ }
+ position++
+ if buffer[position] != rune('|') {
+ goto l87
+ }
+ position++
+ {
+ position91, tokenIndex91 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l91
+ }
+ goto l92
+ l91:
+ position, tokenIndex = position91, tokenIndex91
+ }
+ l92:
+ if !_rules[ruleConjunctions]() {
+ goto l87
+ }
+ goto l88
+ l87:
+ position, tokenIndex = position87, tokenIndex87
+ }
+ l88:
+ add(ruleQuery, position86)
+ }
+ return true
+ l85:
+ position, tokenIndex = position85, tokenIndex85
+ return false
+ },
+ /* 15 Conjunctions <- <(Conjunction (WS? ('&' '&') WS? Conjunctions)?)> */
+ func() bool {
+ position93, tokenIndex93 := position, tokenIndex
+ {
+ position94 := position
+ if !_rules[ruleConjunction]() {
+ goto l93
+ }
+ {
+ position95, tokenIndex95 := position, tokenIndex
+ {
+ position97, tokenIndex97 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l97
+ }
+ goto l98
+ l97:
+ position, tokenIndex = position97, tokenIndex97
+ }
+ l98:
+ if buffer[position] != rune('&') {
+ goto l95
+ }
+ position++
+ if buffer[position] != rune('&') {
+ goto l95
+ }
+ position++
+ {
+ position99, tokenIndex99 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l99
+ }
+ goto l100
+ l99:
+ position, tokenIndex = position99, tokenIndex99
+ }
+ l100:
+ if !_rules[ruleConjunctions]() {
+ goto l95
+ }
+ goto l96
+ l95:
+ position, tokenIndex = position95, tokenIndex95
+ }
+ l96:
+ add(ruleConjunctions, position94)
+ }
+ return true
+ l93:
+ position, tokenIndex = position93, tokenIndex93
+ return false
+ },
+ /* 16 Conjunction <- <(Field WS? Relation WS? StringLiteral)> */
+ func() bool {
+ position101, tokenIndex101 := position, tokenIndex
+ {
+ position102 := position
+ if !_rules[ruleField]() {
+ goto l101
+ }
+ {
+ position103, tokenIndex103 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l103
+ }
+ goto l104
+ l103:
+ position, tokenIndex = position103, tokenIndex103
+ }
+ l104:
+ if !_rules[ruleRelation]() {
+ goto l101
+ }
+ {
+ position105, tokenIndex105 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l105
+ }
+ goto l106
+ l105:
+ position, tokenIndex = position105, tokenIndex105
+ }
+ l106:
+ if !_rules[ruleStringLiteral]() {
+ goto l101
+ }
+ add(ruleConjunction, position102)
+ }
+ return true
+ l101:
+ position, tokenIndex = position101, tokenIndex101
+ return false
+ },
+ /* 17 Field <- <([a-z] ([a-z] / [A-Z] / [0-9])*)> */
+ func() bool {
+ position107, tokenIndex107 := position, tokenIndex
+ {
+ position108 := position
+ if c := buffer[position]; c < rune('a') || c > rune('z') {
+ goto l107
+ }
+ position++
+ l109:
+ {
+ position110, tokenIndex110 := position, tokenIndex
+ {
+ position111, tokenIndex111 := position, tokenIndex
+ if c := buffer[position]; c < rune('a') || c > rune('z') {
+ goto l112
+ }
+ position++
+ goto l111
+ l112:
+ position, tokenIndex = position111, tokenIndex111
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l113
+ }
+ position++
+ goto l111
+ l113:
+ position, tokenIndex = position111, tokenIndex111
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l110
+ }
+ position++
+ }
+ l111:
+ goto l109
+ l110:
+ position, tokenIndex = position110, tokenIndex110
+ }
+ add(ruleField, position108)
+ }
+ return true
+ l107:
+ position, tokenIndex = position107, tokenIndex107
+ return false
+ },
+ /* 18 Relation <- <(('=' '=') / ('!' '=') / ('c' 'o' 'n' 't' 'a' 'i' 'n' 's') / ('s' 't' 'a' 'r' 't' 's' 'W' 'i' 't' 'h') / ('e' 'n' 'd' 's' 'W' 'i' 't' 'h'))> */
+ func() bool {
+ position114, tokenIndex114 := position, tokenIndex
+ {
+ position115 := position
+ {
+ position116, tokenIndex116 := position, tokenIndex
+ if buffer[position] != rune('=') {
+ goto l117
+ }
+ position++
+ if buffer[position] != rune('=') {
+ goto l117
+ }
+ position++
+ goto l116
+ l117:
+ position, tokenIndex = position116, tokenIndex116
+ if buffer[position] != rune('!') {
+ goto l118
+ }
+ position++
+ if buffer[position] != rune('=') {
+ goto l118
+ }
+ position++
+ goto l116
+ l118:
+ position, tokenIndex = position116, tokenIndex116
+ if buffer[position] != rune('c') {
+ goto l119
+ }
+ position++
+ if buffer[position] != rune('o') {
+ goto l119
+ }
+ position++
+ if buffer[position] != rune('n') {
+ goto l119
+ }
+ position++
+ if buffer[position] != rune('t') {
+ goto l119
+ }
+ position++
+ if buffer[position] != rune('a') {
+ goto l119
+ }
+ position++
+ if buffer[position] != rune('i') {
+ goto l119
+ }
+ position++
+ if buffer[position] != rune('n') {
+ goto l119
+ }
+ position++
+ if buffer[position] != rune('s') {
+ goto l119
+ }
+ position++
+ goto l116
+ l119:
+ position, tokenIndex = position116, tokenIndex116
+ if buffer[position] != rune('s') {
+ goto l120
+ }
+ position++
+ if buffer[position] != rune('t') {
+ goto l120
+ }
+ position++
+ if buffer[position] != rune('a') {
+ goto l120
+ }
+ position++
+ if buffer[position] != rune('r') {
+ goto l120
+ }
+ position++
+ if buffer[position] != rune('t') {
+ goto l120
+ }
+ position++
+ if buffer[position] != rune('s') {
+ goto l120
+ }
+ position++
+ if buffer[position] != rune('W') {
+ goto l120
+ }
+ position++
+ if buffer[position] != rune('i') {
+ goto l120
+ }
+ position++
+ if buffer[position] != rune('t') {
+ goto l120
+ }
+ position++
+ if buffer[position] != rune('h') {
+ goto l120
+ }
+ position++
+ goto l116
+ l120:
+ position, tokenIndex = position116, tokenIndex116
+ if buffer[position] != rune('e') {
+ goto l114
+ }
+ position++
+ if buffer[position] != rune('n') {
+ goto l114
+ }
+ position++
+ if buffer[position] != rune('d') {
+ goto l114
+ }
+ position++
+ if buffer[position] != rune('s') {
+ goto l114
+ }
+ position++
+ if buffer[position] != rune('W') {
+ goto l114
+ }
+ position++
+ if buffer[position] != rune('i') {
+ goto l114
+ }
+ position++
+ if buffer[position] != rune('t') {
+ goto l114
+ }
+ position++
+ if buffer[position] != rune('h') {
+ goto l114
+ }
+ position++
+ }
+ l116:
+ add(ruleRelation, position115)
+ }
+ return true
+ l114:
+ position, tokenIndex = position114, tokenIndex114
+ return false
+ },
+ /* 19 WS <- <(' ' / '\t')+> */
+ func() bool {
+ position121, tokenIndex121 := position, tokenIndex
+ {
+ position122 := position
+ {
+ position125, tokenIndex125 := position, tokenIndex
+ if buffer[position] != rune(' ') {
+ goto l126
+ }
+ position++
+ goto l125
+ l126:
+ position, tokenIndex = position125, tokenIndex125
+ if buffer[position] != rune('\t') {
+ goto l121
+ }
+ position++
+ }
+ l125:
+ l123:
+ {
+ position124, tokenIndex124 := position, tokenIndex
+ {
+ position127, tokenIndex127 := position, tokenIndex
+ if buffer[position] != rune(' ') {
+ goto l128
+ }
+ position++
+ goto l127
+ l128:
+ position, tokenIndex = position127, tokenIndex127
+ if buffer[position] != rune('\t') {
+ goto l124
+ }
+ position++
+ }
+ l127:
+ goto l123
+ l124:
+ position, tokenIndex = position124, tokenIndex124
+ }
+ add(ruleWS, position122)
+ }
+ return true
+ l121:
+ position, tokenIndex = position121, tokenIndex121
+ return false
+ },
+ }
+ p.rules = _rules
+}