// ----------------------------------------------------------------------------------------------------------------------------------------------- func (dfa *DFA_PoolType) DumpPoolOneState(ii int) string { pLnNo := com.DbOn("db_DFA_LnNo") IfLnNo := func(s string) string { if pLnNo { t := fmt.Sprintf("[%3s]", s) return t } return "" } vv := dfa.Pool[ii] s := "" s += fmt.Sprintf("%3d%s: ", ii, IfLnNo(vv.LineNo)) s += fmt.Sprintf(" %12s %12s %s :", vv.StateName, com.SVar(vv.StateSet), com.ChkOrBlank(vv.Visited)) if vv.Rv > 0 { s += fmt.Sprintf(" T:%04d ", vv.Rv) } else { s += fmt.Sprintf(" ") } s += fmt.Sprintf("\t E:") for _, ww := range vv.Next2 { if ww.IsLambda { s += fmt.Sprintf("{ ERROR!! \u03bb %2d -> %2d %s} ", ww.From, ww.To, ww.LineNo) } else { s += fmt.Sprintf("{ \"%s\" %2d -> %2d %s} ", ww.On, ww.From, ww.To, IfLnNo(ww.LineNo)) } } s += "\n" if vv.Info.Action != 0 || vv.Info.MatchLength != 0 { s += fmt.Sprintf("\t\t\tDFA.Info: %s", nfa.DumpInfo(vv.Info)) } s += "\n" return s }
func (dfa *DFA_PoolType) DumpPool(all bool) { if all { com.DbPrintf("db_DumpDFAPool", "Cur: %d Top: %d NextFree %d\n", dfa.Cur, dfa.Top, dfa.NextFree) } com.DbPrintf("db_DumpDFAPool", "\n---------------------------- DFA Output -----------------------------------------------\n") com.DbPrintf("db_DumpDFAPool", "\nDFA InitState: %d, Sigma ->%s<-\n\n", dfa.InitState, dfa.Sigma) pLnNo := com.DbOn("db_DFA_LnNo") IfLnNo := func(s string) string { if pLnNo { t := fmt.Sprintf("[%3s]", s) return t } return "" } com.DbPrintf("db_DumpDFAPool", "%3s%s: ", "St", IfLnNo("/Ln")) com.DbPrintf("db_DumpDFAPool", " %12s %12s \u2714 \tEdges", "StateName", "StateSet") com.DbPrintf("db_DumpDFAPool", "\n\n") for ii, vv := range dfa.Pool { if all || vv.IsUsed { com.DbPrintf("db_DumpDFAPool", "%3d%s: ", ii, IfLnNo(vv.LineNo)) com.DbPrintf("db_DumpDFAPool", " %12s %12s %s :", vv.StateName, com.SVar(vv.StateSet), com.ChkOrBlank(vv.Visited)) if vv.Rv > 0 { if vv.Is0Ch { com.DbPrintf("db_DumpDFAPool", " \u03c4:Tau:%04d ", vv.Rv) } else { com.DbPrintf("db_DumpDFAPool", " T:%04d ", vv.Rv) } } else { com.DbPrintf("db_DumpDFAPool", " ") } if com.DbOn("db_DumpDFAPool") { fmt.Printf("\t E:") for _, ww := range vv.Next2 { if ww.Is0ChMatch { fmt.Printf("//Found \u03c4 (%s) //", com.LF()) // Show a Tau(t) for a lambda that matchiens on else conditions. } if ww.IsLambda { fmt.Printf("{ ERROR!! \u03bb %2d -> %2d %s} ", ww.From, ww.To, ww.LineNo) } else { // fmt.Printf("{ \"%s\" %2d -> %2d %s} ", ww.On, ww.From, ww.To, IfLnNo(ww.LineNo)) on, _ := utf8.DecodeRune([]byte(ww.On)) son := fmt.Sprintf("%q", ww.On) switch on { case re.R_DOT: // = '\uF8FA' // Any char in Sigma son = "DOT/uF8FA" case re.R_BOL: // = '\uF8F3' // Beginning of line son = "BOL/uF8F3" case re.R_EOL: // = '\uF8F4' // End of line son = "EOL/uF8F4" case re.R_NUMERIC: // = '\uF8F5' son = "NUMERIC/uF8F5" case re.R_LOWER: // = '\uF8F6' son = "LOWER/uF8F6" case re.R_UPPER: // = '\uF8F7' son = "UPPER/uF8F7" case re.R_ALPHA: // = '\uF8F8' son = "ALPHA/uF8F8" case re.R_ALPHNUM: // = '\uF8F9' son = "ALPHANUM/uF8F9" case re.R_EOF: // = '\uF8FB' son = "EOF/uF8FB" case re.R_not_CH: // = '\uF8FC' // On input lookup if the char is NOT in Signa then it is returned as this. son = "else_CH/uF8Fc" case re.R_N_CCL: // = '\uF8FD' // If char is not matched in this state then take this path son = "N_CCL/uF8Fd" case re.R_LAMBDA_MATCH: // = '\uF8FE' son = "LambdaM/uF8FE" } fmt.Printf("{ %s %2d -> %2d %s} ", son, ww.From, ww.To, IfLnNo(ww.LineNo)) } } fmt.Printf("\n") if vv.Info.Action != 0 || vv.Info.MatchLength != 0 { // fmt.Printf("\t\t\tInfo: %s\n", com.SVar(vv.Info)) // xyzzy - output Info // xyzzy - NextState info fmt.Printf("\t\t\tDFA.Info: %s", nfa.DumpInfo(vv.Info)) // if ((vv.Info.Action&com.A_Pop) != 0 || (vv.Info.Action&com.A_Push) != 0 || (vv.Info.Action&com.A_Reset) != 0) && !vv.Info.HardMatch { // xyzzy8 fmt.Printf(" IsHard=%v (((false imples else case Rv!)))\n", vv.Info.HardMatch) } fmt.Printf("\n") } } } }