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) { func (self *scanner) fetchNextToken() (tk *Token) {
var ch byte
if err := self.skipBlanks(); err != nil { if err := self.skipBlanks(); err != nil {
return self.makeErrorToken(err) return self.makeErrorToken(err)
} }
escape := false escape := false
for { for {
ch, _ := self.readChar() ch, _ = self.readChar()
switch ch { switch ch {
case '+': case '+':
if next, _ := self.peek(); next == '+' { if next, _ := self.peek(); next == '+' {
@ -143,6 +144,8 @@ func (self *scanner) fetchNextToken() (tk *Token) {
} }
case ',': case ',':
tk = self.makeToken(SymComma, ch) tk = self.makeToken(SymComma, ch)
case '^':
tk = self.makeToken(SymCaret, ch)
case ':': case ':':
if next, _ := self.peek(); next == ':' { if next, _ := self.peek(); next == ':' {
tk = self.moveOn(SymDoubleColon, ch, next) tk = self.moveOn(SymDoubleColon, ch, next)
@ -271,6 +274,9 @@ func (self *scanner) fetchNextToken() (tk *Token) {
break break
} }
} }
if tk == nil {
tk = NewErrorToken(self.row, self.column, fmt.Errorf("unknown symbol '%c'", ch))
}
return return
} }

View File

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