WHITESPACE = _{ " " | "\t" | "\r\n" | "\n"}
StringLit = _{ StringLitDq | StringLitSq }
StringLitDq = _{ "\"" ~ StringDq ~ "\"" }
StringLitSq = _{ "'" ~ StringSq ~ "'" }
StringDq = { (("\\" ~ ("\"" | "\\")) | (!"\"" ~ ANY))* }
StringSq = { (("\\" ~ ("'" | "\\")) | (!"'" ~ ANY))* }
ElementAccess = _{ ("." ~ Key) | KeyBrackets }
Index = ${ ASCII_DIGIT+ }
Key = ${ (ASCII_ALPHANUMERIC | "_")* }
KeyBrackets = _{ "[" ~ (StringLit | Index) ~ "]" }
Path = _{ Key ~ ElementAccess* }
Parts = _{ SOI ~ Path ~ EOI }