aboutsummaryrefslogtreecommitdiff
path: root/spec/lexer.go
diff options
context:
space:
mode:
authorRyo Nihei <nihei.dev@gmail.com>2021-07-17 00:14:05 +0900
committerRyo Nihei <nihei.dev@gmail.com>2021-07-17 00:14:05 +0900
commit7642c78eea162b843a9762ddf8d7062c9ed03e2b (patch)
tree471fbea50a7b08585e15de2d67c6fd1c7b96dc4d /spec/lexer.go
parentAdd a line number to error messages (diff)
downloadcotia-7642c78eea162b843a9762ddf8d7062c9ed03e2b.tar.gz
cotia-7642c78eea162b843a9762ddf8d7062c9ed03e2b.tar.xz
Add a line number to token error messages
Diffstat (limited to 'spec/lexer.go')
-rw-r--r--spec/lexer.go21
1 files changed, 17 insertions, 4 deletions
diff --git a/spec/lexer.go b/spec/lexer.go
index b19a771..3a5a914 100644
--- a/spec/lexer.go
+++ b/spec/lexer.go
@@ -12,6 +12,7 @@ import (
mldriver "github.com/nihei9/maleeni/driver"
mlspec "github.com/nihei9/maleeni/spec"
+ verr "github.com/nihei9/vartan/error"
)
type tokenKind string
@@ -180,7 +181,10 @@ func (l *lexer) lexAndSkipWSs() (*token, error) {
return newSymbolToken(tokenKindKWFragment, newPosition(l.row)), nil
case "identifier":
if strings.HasPrefix(tok.Text(), "_") {
- return nil, synErrAutoGenID
+ return nil, &verr.SpecError{
+ Cause: synErrAutoGenID,
+ Row: l.row,
+ }
}
return newIDToken(tok.Text(), newPosition(l.row)), nil
case "terminal_open":
@@ -191,14 +195,20 @@ func (l *lexer) lexAndSkipWSs() (*token, error) {
return nil, err
}
if tok.EOF {
- return nil, synErrUnclosedTerminal
+ return nil, &verr.SpecError{
+ Cause: synErrUnclosedTerminal,
+ Row: l.row,
+ }
}
switch tok.KindName {
case "pattern":
// Remove '\' character.
fmt.Fprintf(&b, strings.ReplaceAll(tok.Text(), `\"`, `"`))
case "escape_symbol":
- return nil, synErrIncompletedEscSeq
+ return nil, &verr.SpecError{
+ Cause: synErrIncompletedEscSeq,
+ Row: l.row,
+ }
case "terminal_close":
return newTerminalPatternToken(b.String(), newPosition(l.row)), nil
}
@@ -222,7 +232,10 @@ func (l *lexer) lexAndSkipWSs() (*token, error) {
return nil, err
}
if num == 0 {
- return nil, synErrZeroPos
+ return nil, &verr.SpecError{
+ Cause: synErrZeroPos,
+ Row: l.row,
+ }
}
return newPositionToken(num, newPosition(l.row)), nil
case "expansion":