aboutsummaryrefslogtreecommitdiff
path: root/pkg/lang/scanner
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-08-08 23:46:09 +0000
committerMel <einebeere@gmail.com>2022-08-08 23:46:09 +0000
commit7717384414926eaa5821f04a08ee0d198f7b786f (patch)
tree0b667518eba4c8d023d39a70fecf153a795a7f9c /pkg/lang/scanner
parente0161c493867e788ad9db208247f3275e2d057dc (diff)
downloadjinx-7717384414926eaa5821f04a08ee0d198f7b786f.tar.zst
jinx-7717384414926eaa5821f04a08ee0d198f7b786f.zip
Produce (slightly) better parser errors
Diffstat (limited to 'pkg/lang/scanner')
-rw-r--r--pkg/lang/scanner/token/token.go72
1 files changed, 71 insertions, 1 deletions
diff --git a/pkg/lang/scanner/token/token.go b/pkg/lang/scanner/token/token.go
index a39df8a..9fee730 100644
--- a/pkg/lang/scanner/token/token.go
+++ b/pkg/lang/scanner/token/token.go
@@ -1,6 +1,9 @@
package token
-import "jinx/pkg/libs/source"
+import (
+ "fmt"
+ "jinx/pkg/libs/source"
+)
type Token struct {
Kind TokenKind
@@ -31,3 +34,70 @@ func (t Token) CanEndStmt() bool {
return false
}
}
+
+func (t Token) String() string {
+ switch t.Kind {
+ case EOF, EOL:
+ return t.Kind.String()
+
+ case KwVar,
+ KwFn,
+ KwType,
+ KwIf,
+ KwElif,
+ KwElse,
+ KwFor,
+ KwTry,
+ KwCatch,
+ KwFinally,
+ KwReturn,
+ KwContinue,
+ KwBreak,
+ KwThrow,
+ KwIn,
+ KwNull,
+ KwTrue,
+ KwFalse,
+ KwThis,
+ KwUse,
+ KwFrom,
+ KwBy,
+ KwGlobal:
+ return fmt.Sprintf("keyword '%v'", t.Kind)
+
+ case Ident:
+ return fmt.Sprintf("identifier '%v'", t.Data)
+ case Int:
+ return fmt.Sprintf("integer '%v'", t.Data)
+ case Float:
+ return fmt.Sprintf("float '%v'", t.Data)
+ case String:
+ return fmt.Sprintf("string '%v'", t.Data)
+
+ case Assign,
+ Plus,
+ Minus,
+ Star,
+ Slash,
+ Percent,
+ Bang,
+ Eq,
+ Neq,
+ Lt,
+ Gt,
+ Lte,
+ Gte,
+ LParen,
+ RParen,
+ LBrace,
+ RBrace,
+ LBracket,
+ RBracket,
+ Comma,
+ Dot,
+ SemiColon:
+ return fmt.Sprintf("'%v'", t.Kind)
+ default:
+ return "unknown token"
+ }
+}