Skip to content

Commit 970370a

Browse files
authored
Return position where parsing is failed (#80)
1 parent 80362f4 commit 970370a

File tree

2 files changed

+79
-58
lines changed

2 files changed

+79
-58
lines changed

lyx/util.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,21 @@ func setParseTree(yylex interface{}, stmt []Node) {
4444
yylex.(*Tokenizer).ParseTree = stmt
4545
}
4646

47-
func Parse(sql string) ([]Node, error) {
47+
func Parse(sql string) ([]Node, int, error) {
4848
tokenizer := NewStringTokenizer(sql)
49-
if yyParse(tokenizer) != 0 {
50-
return nil, errors.New(tokenizer.LastError + fmt.Sprintf(" on pos %d", tokenizer.l.ts))
49+
p := yyNewParser()
50+
if p.Parse(tokenizer) != 0 {
51+
return nil, tokenizer.l.ts, errors.New(tokenizer.LastError)
5152
}
5253
ast := tokenizer.ParseTree
53-
return ast, nil
54+
return ast, 0, nil
5455
}
5556

56-
func ParseWithLexerParser(l LyxParser, t *Tokenizer, sql string) ([]Node, error) {
57+
func ParseWithLexerParser(l LyxParser, t *Tokenizer, sql string) ([]Node, int, error) {
5758
t.Reset(sql)
5859
if l.Parse(t) != 0 {
59-
return nil, errors.New(t.LastError + fmt.Sprintf(" on pos %d", t.l.ts))
60+
return nil, 0, errors.New(t.LastError + fmt.Sprintf(" at or near %d", t.l.ts))
6061
}
6162
ast := t.ParseTree
62-
return ast, nil
63+
return ast, 0, nil
6364
}

0 commit comments

Comments
 (0)