From a628bfac396eb5b24e3326747fd25d5fa7eaba1c Mon Sep 17 00:00:00 2001 From: Celestino Amoroso Date: Sun, 21 Apr 2024 07:10:19 +0200 Subject: [PATCH] New symbol '^' (caret). The scanner now returns an error token if can't recognise a symbol. --- scanner.go | 8 +++++++- symbol.go | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/scanner.go b/scanner.go index b5e1f18..7acdcb4 100644 --- a/scanner.go +++ b/scanner.go @@ -86,13 +86,14 @@ func (self *scanner) Next() (tk *Token) { } func (self *scanner) fetchNextToken() (tk *Token) { + var ch byte if err := self.skipBlanks(); err != nil { return self.makeErrorToken(err) } escape := false for { - ch, _ := self.readChar() + ch, _ = self.readChar() switch ch { case '+': if next, _ := self.peek(); next == '+' { @@ -143,6 +144,8 @@ func (self *scanner) fetchNextToken() (tk *Token) { } case ',': tk = self.makeToken(SymComma, ch) + case '^': + tk = self.makeToken(SymCaret, ch) case ':': if next, _ := self.peek(); next == ':' { tk = self.moveOn(SymDoubleColon, ch, next) @@ -271,6 +274,9 @@ func (self *scanner) fetchNextToken() (tk *Token) { break } } + if tk == nil { + tk = NewErrorToken(self.row, self.column, fmt.Errorf("unknown symbol '%c'", ch)) + } return } diff --git a/symbol.go b/symbol.go index 9f9f152..0855977 100644 --- a/symbol.go +++ b/symbol.go @@ -61,6 +61,7 @@ const ( SymDoubleColon // 50: '::' SymInsert // 51: '>>' SymAppend // 52: '<<' + SymCaret // 53: '^' SymChangeSign SymUnchangeSign SymIdentifier