diff --git a/demo/demo.rpy b/demo/demo.rpy index f41016c..d986d46 100644 --- a/demo/demo.rpy +++ b/demo/demo.rpy @@ -4,9 +4,6 @@ what the heck "this is a string with a # comment" "this is a string over multiple lines" -"this is \"escaped\"" -'this is a single quote string' -'this also has escaped \'quotes\'' this is cool # comment huh \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index d6fb698..8670d77 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,22 +19,11 @@ pub fn parse(file_path: &str) { for token in line.into_inner() { match token.as_rule() { Rule::token => { - let token = token.into_inner().next().unwrap(); - match token.as_rule() { - Rule::string => { - let string_data = token.into_inner().next().unwrap(); - let str = string_data.as_str(); - println!("string: {}", match string_data.as_rule() { - Rule::single_quote_string_data => str.replace("\\'", "'"), - Rule::double_quote_string_data => str.replace("\\\"", "\""), - _ => unreachable!(), - }); - }, - Rule::keyword => println!("keyword: {}", token.as_str()), - _ => unreachable!(), - }; + println!("{}", token.as_str()); }, - _ => unreachable!(), + _ => { + println!("{}", token.as_str()); + } } } println!() diff --git a/src/rpy.pest b/src/rpy.pest index 6ffbdbf..5fdaf5d 100644 --- a/src/rpy.pest +++ b/src/rpy.pest @@ -13,18 +13,10 @@ token = { string | keyword } // has to be atomic for no implicit separate (spaces) keyword = @{ (!(WHITESPACE | NEWLINE) ~ ANY)+ } -single_quote_string_data = @{ ( - "\\'" // Escaped single quotes - | (!"'" ~ ANY) -)* } -double_quote_string_data = @{ ( - "\\\"" // Escaped double quotes - | (!"\"" ~ ANY) -)* } -string = ${ - ("'" ~ single_quote_string_data ~ "'") - | ("\"" ~ double_quote_string_data ~ "\"") -} +// strings cannot contain quotes +// TODO: escaped quotes +string_data = @{ (!"\"" ~ ANY)* } +string = ${ "\"" ~ string_data ~ "\"" } // comments are a # followed by // any number of non-newline characters