()
| 126 | } |
| 127 | |
| 128 | func (p *parser) parseExp() (c *Constraint, err error) { |
| 129 | if p.peek().typ == tokenEOF { |
| 130 | return |
| 131 | } |
| 132 | c, err = p.parseOperand() |
| 133 | if err != nil { |
| 134 | return |
| 135 | } |
| 136 | for { |
| 137 | switch p.peek().typ { |
| 138 | case tokenAnd: |
| 139 | p.next() |
| 140 | case tokenOr: |
| 141 | p.next() |
| 142 | return p.parseOrRHS(c) |
| 143 | case tokenClose, tokenEOF: |
| 144 | return |
| 145 | } |
| 146 | c, err = p.parseAndRHS(c) |
| 147 | if err != nil { |
| 148 | return |
| 149 | } |
| 150 | } |
| 151 | } |
| 152 | |
| 153 | func (p *parser) parseGroup() (c *Constraint, err error) { |
| 154 | i := p.next() |