2 Commits

Author SHA1 Message Date
amery ee2e5c2001 build-sys: use local asciigoat.org/core [DO-NOT-MERGE]
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-31 00:19:16 +00:00
amery 330d885a60 parser: add initial Parser emitting non-whitespace tokens
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-31 00:18:36 +00:00
2 changed files with 7 additions and 8 deletions
+4 -5
View File
@@ -15,13 +15,12 @@ func (p *Parser) lexStart() (lexer.StateFn, error) {
r, _, err := p.src.ReadRune() r, _, err := p.src.ReadRune()
switch { switch {
case err != nil: case err != nil:
return p.emitError("", err) err = p.emitError("", err)
return nil, err
case IsNewLine(r): case IsNewLine(r):
// new line p.lexNewLine(r)
p.lexMoreNewLine(r)
p.stepLine() p.stepLine()
case IsSpace(r): case IsSpace(r):
// whitespace
p.stepRune() p.stepRune()
default: default:
p.src.UnreadRune() p.src.UnreadRune()
@@ -30,7 +29,7 @@ func (p *Parser) lexStart() (lexer.StateFn, error) {
} }
} }
func (p *Parser) lexMoreNewLine(r1 rune) { func (p *Parser) lexNewLine(r1 rune) {
// r1 is warrantied to be either '\r' or '\n' // r1 is warrantied to be either '\r' or '\n'
r2, _, err := p.src.ReadRune() r2, _, err := p.src.ReadRune()
switch r1 { switch r1 {
+3 -3
View File
@@ -60,15 +60,15 @@ func (p *Parser) emitString(typ TokenType) error {
return err return err
} }
func (p *Parser) emitError(content string, err error) (lexer.StateFn, error) { func (p *Parser) emitError(content string, err error) error {
err2 := p.OnError(p.pos, content, err) err2 := p.OnError(p.pos, content, err)
switch { switch {
case err2 != nil: case err2 != nil:
// return wrapped error // return wrapped error
return nil, err2 return err2
default: default:
// return original error // return original error
return nil, err return err
} }
} }