MCPcopy Create free account
hub / github.com/brimdata/super / parse

Method parse

compiler/parser/parser.go:25107–25171  ·  view source on GitHub ↗
(g *grammar)

Source from the content-addressed store, hash-verified

25105}
25106
25107func (p *parser) parse(g *grammar) (val any, err error) {
25108 if len(g.rules) == 0 {
25109 p.addErr(errNoRule)
25110 return nil, p.errs.err()
25111 }
25112
25113 // TODO : not super critical but this could be generated
25114 p.buildRulesTable(g)
25115
25116 if p.recover {
25117 // panic can be used in action code to stop parsing immediately
25118 // and return the panic as an error.
25119 defer func() {
25120 if e := recover(); e != nil {
25121 if p.debug {
25122 defer p.out(p.in("panic handler"))
25123 }
25124 val = nil
25125 switch e := e.(type) {
25126 case error:
25127 p.addErr(e)
25128 default:
25129 p.addErr(fmt.Errorf("%v", e))
25130 }
25131 err = p.errs.err()
25132 }
25133 }()
25134 }
25135
25136 startRule, ok := p.rules[p.entrypoint]
25137 if !ok {
25138 p.addErr(errInvalidEntrypoint)
25139 return nil, p.errs.err()
25140 }
25141
25142 p.read() // advance to first rune
25143 val, ok = p.parseRuleWrap(startRule)
25144 if !ok {
25145 if len(*p.errs) == 0 {
25146 // If parsing fails, but no errors have been recorded, the expected values
25147 // for the farthest parser position are returned as error.
25148 maxFailExpectedMap := make(map[string]struct{}, len(p.maxFailExpected))
25149 for _, v := range p.maxFailExpected {
25150 maxFailExpectedMap[v] = struct{}{}
25151 }
25152 expected := make([]string, 0, len(maxFailExpectedMap))
25153 eof := false
25154 if _, ok := maxFailExpectedMap["!."]; ok {
25155 delete(maxFailExpectedMap, "!.")
25156 eof = true
25157 }
25158 for k := range maxFailExpectedMap {
25159 expected = append(expected, k)
25160 }
25161 sort.Strings(expected)
25162 if eof {
25163 expected = append(expected, "EOF")
25164 }

Callers 1

ParseFunction · 0.45

Calls 10

addErrMethod · 0.95
buildRulesTableMethod · 0.95
outMethod · 0.95
inMethod · 0.95
readMethod · 0.95
parseRuleWrapMethod · 0.95
addErrAtMethod · 0.95
listJoinFunction · 0.85
errMethod · 0.80
NewMethod · 0.80

Tested by

no test coverage detected