newline = ${ "\n" | "\r" }
space = ${ " "+ }
other = ${ !(string) ~ ANY }
comment = ${ single_line_comment | multiline_comment }
single_line_comment = _{ "//" ~ (!(newline) ~ ANY)* }
multiline_comment = _{ "/*" ~ (!("*/") ~ ANY)* ~ "*/"}
string = ${ string_val }
string_val = _{
("'''" ~ (!("'''") ~ ANY)* ~ "'''")
| ("'" ~ (!("'" | newline) ~ ANY)* ~ "'")
| ("\"\"\"" ~ (!("\"\"\"") ~ ANY)* ~ "\"\"\"")
| ("\"" ~ (!("\"" | newline) ~ ANY)* ~ "\"")
}
regexp = ${
("r" ~ string_val)
}
line = _{ regexp | string | comment | space | other | newline }
item = _{ SOI ~ line* ~ EOI }