MCPcopy Create free account
hub / github.com/cogentcore/core / OptimizeOrder

Method OptimizeOrder

parse/parser/rule.go:375–415  ·  view source on GitHub ↗

OptimizeOrder optimizes the order of processing rule elements, including: * A block of reversed elements that match from next

(ps *State)

Source from the content-addressed store, hash-verified

373// OptimizeOrder optimizes the order of processing rule elements, including:
374// * A block of reversed elements that match from next
375func (pr *Rule) OptimizeOrder(ps *State) {
376 osz := len(pr.Order)
377 if osz == 0 {
378 return
379 }
380 nfmnxt := 0
381 fmnSt := -1
382 fmnEd := -1
383 lastwas := false
384 for oi := 0; oi < osz; oi++ {
385 ri := pr.Order[oi]
386 rr := &pr.Rules[ri]
387 if rr.FromNext {
388 nfmnxt++
389 if fmnSt < 0 {
390 fmnSt = oi
391 }
392 if lastwas {
393 fmnEd = oi // end of block
394 }
395 lastwas = true
396 } else {
397 lastwas = false
398 }
399 }
400 if nfmnxt > 1 && fmnEd > 0 {
401 nword := make([]int, osz)
402 for oi := 0; oi < fmnSt; oi++ {
403 nword[oi] = pr.Order[oi]
404 }
405 idx := fmnSt
406 for oi := fmnEd - 1; oi >= fmnSt; oi-- {
407 nword[idx] = pr.Order[oi]
408 idx++
409 }
410 for oi := fmnEd; oi < osz; oi++ {
411 nword[oi] = pr.Order[oi]
412 }
413 pr.Order = nword
414 }
415}
416
417// CompileTokMap compiles first token map
418func (pr *Rule) CompileTokMap(ps *State) bool {

Callers 1

CompileMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected