//! Ruby Parser
item = _{ SOI ~ line* ~ EOI }
line = _{ string | regexp | other }
other = ${ !(string) ~ ANY }
WHITESPACE = { " " | "\t" | NEWLINE }
/// Comment
COMMENT = ${ line_comment | block_comment }
line_comment = _{ "#" ~ (!(NEWLINE) ~ ANY)* }
block_comment = _{ "/*" ~ (!("*/") ~ ANY)* ~ "*/" }
/// String
string = ${
PUSH("'") ~ inner_string ~ POP
| PUSH("\"") ~ inner_string ~ POP
}
inner_string = { (!(NEWLINE | PEEK) ~ ANY)* }
/// Regexp
regexp = ${
PUSH("/") ~ (!(NEWLINE | "/") ~ ANY)* ~ POP
| ("%r{" ~ (!(NEWLINE | "}") ~ ANY)* ~ "}")
| ("Regexp.new(" ~ " "* ~ (!")" ~ ANY)* ~ ")")
}