From a1696ccdb8230d4360435a68371bb6c9cef4913f Mon Sep 17 00:00:00 2001 From: Andy Grove Date: Mon, 3 Sep 2018 07:59:05 -0600 Subject: [PATCH] Refactoring --- examples/acme_parser.rs | 17 ++++++----------- src/parser.rs | 27 ++++++++++++++++----------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/examples/acme_parser.rs b/examples/acme_parser.rs index 75389942..32447bd3 100644 --- a/examples/acme_parser.rs +++ b/examples/acme_parser.rs @@ -105,16 +105,11 @@ fn main() { let ansi_parser = Arc::new(Mutex::new(ANSISQLParser::new(acme_tokenizer.clone()))); let acme_parser = Arc::new(Mutex::new(AcmeParser::new(acme_tokenizer.clone()))); - // ansi_parser.lock().unwrap().next_token(); + let mut pratt_parser = PrattParser { + chars: CharSeq::new(sql), + parser: acme_parser + }; - //let parser_list = vec![acme_parser, ansi_parser]; - - // Custom ACME parser -// let acme_parser: Arc>> = Arc::new(Mutex::new(AcmeParser { -// ansi_parser: Arc::new(Mutex::new(ANSISQLParser::new(acme_tokenizer))) -// })); - -// let expr = parse_expr(acme_parser).unwrap(); -// -// println!("Parsed: {:?}", expr); + let expr = pratt_parser.parse_expr().unwrap(); + println!("{:?}", expr); } diff --git a/src/parser.rs b/src/parser.rs index c4c0e0c2..89955ca9 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -1,5 +1,6 @@ use std::cmp::PartialEq; use std::fmt::Debug; +use std::sync::{Arc, Mutex}; use super::tokenizer::*; @@ -113,11 +114,21 @@ pub trait SQLParser fn parse_infix(&mut self, chars: &mut CharSeq, left: &SQLExpr, precedence: usize) -> Result>>, ParserError>; } -//struct PrattParser { -// -// ansi_parser: -// -//} +pub struct PrattParser { + pub chars: CharSeq, + pub parser: Arc>> +} + +impl PrattParser where TokenType: Debug + PartialEq, ExprType: Debug { + + pub fn parse_expr(&mut self) -> Result>>, ParserError> { + + let mut p = self.parser.lock().unwrap(); + + p.parse_prefix(&mut self.chars) + } + +} // //pub fn parse_expr<'a, TokenType, ExprType>(parser: Arc>>) @@ -130,12 +141,6 @@ pub trait SQLParser //} -//pub struct PrattParser<'a, TokenType, ExprType> { -// chars: Peekable>, -// tokenizer: Rc>, -// parser: Rc> -//} -// //impl<'a, TokenType, ExprType> PrattParser<'a, TokenType, ExprType> // where TokenType: Debug + PartialEq, ExprType: Debug { //