diff --git a/src/regexp.rs b/src/regexp.rs
--- a/src/regexp.rs
+++ b/src/regexp.rs
@@ -1,6 +1,7 @@
 use std::collections::{HashMap, HashSet};
 
 mod token;
+pub use token::ParsingError;
 use token::{Token, parse};
 
 const START: usize = usize::MAX;
@@ -28,14 +29,15 @@ fn decode_set(x: u64) ->HashSet<usize> {
 	return res;
 }
 
+#[derive(Debug)]
 pub struct Regexp {
 	rules: HashMap<(usize, char), HashSet<usize>>,
 	end_states: HashSet<usize>
 }
 
 impl Regexp {
-	pub fn new(pattern: &String) -> Regexp {
-		let r = parse(pattern, 0);
+	pub fn new(pattern: &String) -> Result<Regexp, ParsingError> {
+		let r = parse(pattern, 0)?;
 		let pattern_chars = Vec::from_iter(pattern.chars());
 		let mut rules: HashMap<(usize, char), HashSet<usize>> = HashMap::new();
 		
@@ -62,7 +64,7 @@ impl Regexp {
 			end_states.insert(START);
 		}
 
-		return Regexp{rules, end_states};
+		return Ok(Regexp{rules, end_states});
 	}
 
 	pub fn eval(&self, s: String) -> bool {