diff options
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": |