// package prc_debug -- процесс отладки package prc_debug import ( "fmt" "log" "strings" "plt/lev2/vm/pos" "plt/lev2/vm/state_vm" ) // PrcDebug -- процесс для отладки type PrcDebug struct { strOut string } // NewPrcDebug -- возвращает новый процесс для отладки func NewPrcDebug() *PrcDebug { log.Println("NewPrcDebug()") sf := &PrcDebug{} sf.parse() return sf } // Парсит инструкции ,вырезает действие func (sf *PrcDebug) parse() { vmState := state_vm.VM_State posCur := pos.PosCur begPosX := 0 begPosY := pos.PosCur.GetY() { // Начать поиск выводимого значения for vmState.StrCur() != "(" { vmState.RuneInc() if vmState.StrCur() == "\n" { posCur.NextLine() } posCur.IncX() } // Сдвинуть позицию vmState.RuneInc() posCur.IncX() begPosX = posCur.GetX() } { // Выбрать значение отладки out := "" for vmState.StrCur() != ")" { strCur := vmState.StrCur() if strCur == "\n" { posCur.NextLine() } out += vmState.StrNext() posCur.IncX() if vmState.IsEnd() { break } } vmState.RuneInc() // Сдвиг после скобки out = strings.ReplaceAll(out, "\n\n", "\n") // if out[len(out)-1] != '\n' { // out += "\n" // } sf.strOut = fmt.Sprintf("%v:%v\td(%v)\n", begPosY, begPosX, out) } } // Run -- запускает процесс (отладка) func (sf *PrcDebug) Run() { fmt.Printf("%v", sf.strOut) }