2 Commits

Author SHA1 Message Date
amery f7ea8d4a0b build-sys: use local asciigoat.org/core [DO-NOT-MERGE]
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-31 00:36:55 +00:00
amery f6b0165957 parser: add initial Parser emitting non-whitespace tokens
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-31 00:34:45 +00:00
2 changed files with 8 additions and 7 deletions
+5 -4
View File
@@ -15,12 +15,13 @@ 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:
err = p.emitError("", err) return p.emitError("", err)
return nil, err
case IsNewLine(r): case IsNewLine(r):
p.lexNewLine(r) // new line
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()
@@ -29,7 +30,7 @@ func (p *Parser) lexStart() (lexer.StateFn, error) {
} }
} }
func (p *Parser) lexNewLine(r1 rune) { func (p *Parser) lexMoreNewLine(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) error { func (p *Parser) emitError(content string, err error) (lexer.StateFn, 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 err2 return nil, err2
default: default:
// return original error // return original error
return err return nil, err
} }
} }