(rule *rule)
| 25244 | } |
| 25245 | |
| 25246 | func (p *parser) parseRuleWrap(rule *rule) (any, bool) { |
| 25247 | if p.debug { |
| 25248 | defer p.out(p.in("parseRule " + rule.name)) |
| 25249 | } |
| 25250 | var ( |
| 25251 | val any |
| 25252 | ok bool |
| 25253 | startMark = p.pt |
| 25254 | ) |
| 25255 | |
| 25256 | if p.memoize || rule.leftRecursive { |
| 25257 | if rule.leader { |
| 25258 | val, ok = p.parseRuleRecursiveLeader(rule) |
| 25259 | } else if p.memoize && !rule.leftRecursive { |
| 25260 | val, ok = p.parseRuleMemoize(rule) |
| 25261 | } else { |
| 25262 | val, ok = p.parseRuleRecursiveNoLeader(rule) |
| 25263 | } |
| 25264 | } else { |
| 25265 | val, ok = p.parseRule(rule) |
| 25266 | } |
| 25267 | |
| 25268 | if ok && p.debug { |
| 25269 | p.printIndent("MATCH", string(p.sliceFrom(startMark))) |
| 25270 | } |
| 25271 | return val, ok |
| 25272 | } |
| 25273 | |
| 25274 | func (p *parser) parseRule(rule *rule) (any, bool) { |
| 25275 | p.rstack = append(p.rstack, rule) |
no test coverage detected