diff --git a/compiler/parser/src/parser.rs b/compiler/parser/src/parser.rs index 49d2e53f6..90903cf24 100644 --- a/compiler/parser/src/parser.rs +++ b/compiler/parser/src/parser.rs @@ -5,6 +5,7 @@ //! parse a whole program, a single statement, or a single //! expression. +use crate::lexer::LexResult; pub use crate::mode::Mode; use crate::{ast, error::ParseError, lexer, python}; use std::iter; @@ -80,6 +81,20 @@ pub fn parse(source: &str, mode: Mode, source_path: &str) -> Result, + mode: Mode, + source_path: &str, +) -> Result { + let marker_token = (Default::default(), mode.to_marker(), Default::default()); + let tokenizer = iter::once(Ok(marker_token)).chain(lxr); + + python::TopParser::new() + .parse(tokenizer) + .map_err(|e| crate::error::parse_error_from_lalrpop(e, source_path)) +} + #[cfg(test)] mod tests { use super::*;