From 35b9d56b3d3c7fdd568b1fb8cd98dba73034fa9b Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Wed, 30 Aug 2023 20:08:29 +0000 Subject: [PATCH] parser: add internal []Token queue to the Parser Signed-off-by: Alejandro Mery --- parser/lexer_queue.go | 44 +++++++++++++++++++++++++++++++++++++++++++ parser/parser.go | 3 ++- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 parser/lexer_queue.go diff --git a/parser/lexer_queue.go b/parser/lexer_queue.go new file mode 100644 index 0000000..1ac8944 --- /dev/null +++ b/parser/lexer_queue.go @@ -0,0 +1,44 @@ +package parser + +import "log" + +func (p *Parser) push(tok Token) { + n := len(p.queue) + p.queue = append(p.queue, tok) + + log.Printf("queue[%v]: %s", n, tok) +} + +func (p *Parser) pushString(typ TokenType) { + s := p.src.Emit() + + el := Token{ + Type: typ, + Value: s, + Position: p.pos, + } + + p.pos.StepN(len(s)) + + p.push(el) +} + +// stepLine discards the data and moves the position +// to the next line +func (p *Parser) stepLine() { + p.src.Discard() + p.pos.StepLine() +} + +// stepRune discards the data and moves the position +// on rune forward on the same line +func (p *Parser) stepRune() { + p.src.Discard() + p.pos.Step() +} + +func (p *Parser) stepString() string { + s := p.src.Emit() + p.pos.StepN(len(s)) + return s +} diff --git a/parser/parser.go b/parser/parser.go index 0edfb1a..8218b66 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -11,7 +11,8 @@ import ( type Parser struct { src *lexer.Reader - pos lexer.Position + pos lexer.Position + queue []Token // OnSection is called after a [section] is parsed. // Returning an error will abort the process.