diff --git a/crates/prolog_parser/src/parser.rs b/crates/prolog_parser/src/parser.rs index c72d6453..364b0213 100644 --- a/crates/prolog_parser/src/parser.rs +++ b/crates/prolog_parser/src/parser.rs @@ -199,13 +199,21 @@ fn read_tokens(lexer: &mut Lexer) -> Result, ParserError> let mut tokens = vec![]; loop { - let token = lexer.next_token()?; - let at_end = token.is_end(); + match lexer.next_token() { + Ok(token) => { + let at_end = token.is_end(); + tokens.push(token); - tokens.push(token); - - if at_end { - break; + if at_end { + break; + } + } + Err(ParserError::UnexpectedEOF) if !tokens.is_empty() => { + return Err(ParserError::IncompleteReduction(lexer.line_num, lexer.col_num)); + } + Err(e) => { + return Err(e); + } } }