diff --git a/parser.go b/parser.go index a8368f4..eb5108e 100644 --- a/parser.go +++ b/parser.go @@ -336,6 +336,7 @@ func (parser *parser) parseItem(scanner *scanner, allowVarRef bool, termSymbols } func (parser *parser) Parse(scanner *scanner, termSymbols ...Symbol) (tree *ast, err error) { + termSymbols = append(termSymbols, SymEos) return parser.parseGeneral(scanner, true, false, termSymbols...) } @@ -487,6 +488,10 @@ func (parser *parser) parseGeneral(scanner *scanner, allowForest bool, allowVarR // lastSym = tk.Sym } + if err == nil && !tk.IsOneOf(termSymbols) { + err = tk.ErrorExpectedGotStringWithPrefix("expected one of", SymListToString(termSymbols, false), SymToString(tk.Sym)) + } + if err == nil { err = tk.Error() }