Add single quote strings, quote escaping

main
Elnu 2 years ago
parent 8faf2eb636
commit a518097ff0

@ -5,6 +5,8 @@ what the heck
"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

@ -19,9 +19,17 @@ 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();
let token = token.into_inner().next().unwrap();
match token.as_rule() {
Rule::string => println!("string: {}", token.as_str()),
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!(),
};

@ -13,10 +13,18 @@ token = { string | keyword }
// has to be atomic for no implicit separate (spaces)
keyword = @{ (!(WHITESPACE | NEWLINE) ~ ANY)+ }
// strings cannot contain quotes
// TODO: escaped quotes
string_data = @{ (!"\"" ~ ANY)* }
string = ${ "\"" ~ string_data ~ "\"" }
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 ~ "\"")
}
// comments are a # followed by
// any number of non-newline characters

Loading…
Cancel
Save