New symbol '^' (caret). The scanner now returns an error token if can't recognise a symbol.

This commit is contained in:
Celestino Amoroso 2024-04-21 07:10:19 +02:00
parent d1122da566
commit a628bfac39
2 changed files with 8 additions and 1 deletions

View File

@ -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
}

View File

@ -61,6 +61,7 @@ const (
SymDoubleColon // 50: '::'
SymInsert // 51: '>>'
SymAppend // 52: '<<'
SymCaret // 53: '^'
SymChangeSign
SymUnchangeSign
SymIdentifier