diff options
author | Ryo Nihei <nihei.dev@gmail.com> | 2021-07-17 00:14:05 +0900 |
---|---|---|
committer | Ryo Nihei <nihei.dev@gmail.com> | 2021-07-17 00:14:05 +0900 |
commit | 7642c78eea162b843a9762ddf8d7062c9ed03e2b (patch) | |
tree | 471fbea50a7b08585e15de2d67c6fd1c7b96dc4d /spec/lexer.go | |
parent | Add a line number to error messages (diff) | |
download | cotia-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.go | 21 |
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": |