create module for ansi tokenizer/parser

This commit is contained in:
Andy Grove 2018-09-01 07:34:41 -06:00
parent 0339558d4e
commit eed0261297
6 changed files with 35 additions and 8 deletions

View file

@ -3,8 +3,8 @@ use std::iter::Peekable;
extern crate datafusion_sql;
use datafusion_sql::ansi::tokenizer::ANSISQLTokenizer;
use datafusion_sql::tokenizer::*;
use datafusion_sql::generic_tokenizer::*;
use datafusion_sql::parser::*;
///
@ -28,7 +28,7 @@ enum AcmeTokenizerError {
}
struct AcmeTokenizer {
generic: GenericTokenizer
generic: ANSISQLTokenizer
}
/// The ACME tokenizer looks for the factorial operator `!!` but delegates everything else
@ -64,7 +64,7 @@ fn main() {
let sql = "1 + !! 5 * 2";
let mut acme_tokenizer = AcmeTokenizer {
generic: GenericTokenizer { }
generic: ANSISQLTokenizer { }
};
let tokens = tokenize(&sql, &mut acme_tokenizer).unwrap();

3
src/ansi/mod.rs Normal file
View file

@ -0,0 +1,3 @@
pub mod tokenizer;
pub mod parser;

24
src/ansi/parser.rs Normal file
View file

@ -0,0 +1,24 @@
use std::cmp::PartialEq;
use std::fmt::Debug;
use std::iter::Peekable;
use std::str::Chars;
use super::super::tokenizer::*;
use super::super::parser::*;
pub struct ANSISQLParser {
}
impl<S,TE> SQLParser<S,TE> for ANSISQLParser
where S: Debug + PartialEq {
fn parse_prefix(&mut self) -> Result<Box<SQLExpr<S>>, ParserError<S, TE>> {
unimplemented!()
}
fn parse_infix(&mut self, left: SQLExpr<S>) -> Result<Option<Box<SQLExpr<S>>>, ParserError<S, TE>> {
unimplemented!()
}
}

View file

@ -3,11 +3,11 @@ use std::fmt::Debug;
use std::iter::Peekable;
use std::str::Chars;
use super::tokenizer::*;
use super::super::tokenizer::*;
pub struct GenericTokenizer {}
pub struct ANSISQLTokenizer {}
impl<S,TE> SQLTokenizer<S,TE> for GenericTokenizer
impl<S,TE> SQLTokenizer<S,TE> for ANSISQLTokenizer
where S: Debug + PartialEq {
fn next_token(&self, chars: &mut Peekable<Chars>) -> Result<Option<SQLToken<S>>, TokenizerError<TE>> {

View file

@ -1,3 +1,3 @@
pub mod ansi;
pub mod tokenizer;
pub mod generic_tokenizer;
pub mod parser;

View file

@ -105,7 +105,7 @@ impl<S, TE> From<TokenizerError<TE>> for ParserError<S, TE>
}
trait Parser<S, PE>
pub trait SQLParser<S, PE>
where S: Debug + PartialEq {
/// parse the prefix and stop once an infix operator is reached