| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // 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)
- }
|