/
torgeek
/
trivil-0-fork
Обзор
Документация
Войти
/
torgeek
/
trivil-0-fork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/parser/parser_trace.go
35 строк
601 B
alekseinedoria
parser trace and first non-terminal
06 дек 2022, 23:09
06 дек 2022, 23:09
e2d52b0
Код
Авторство
О чём код?
package parser import ( "fmt" "trivil/env" ) var _ = fmt.Printf func (p *Parser) printTrace(a ...interface{}) { const dots = ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . " const n = len(dots) _, line, col := env.SourcePos(p.pos) fmt.Printf("%5d:%3d: ", line, col) i := 2 * p.indent for i > n { fmt.Print(dots) i -= n } // i <= n fmt.Print(dots[0:i]) fmt.Println(a...) } func trace(p *Parser, msg string) *Parser { p.printTrace(msg, "(") p.indent++ return p } // Usage pattern: defer un(trace(p, "...")) func un(p *Parser) { p.indent-- p.printTrace(")") }