pest-parser / pest

The Elegant Parser
https://pest.rs
Apache License 2.0
4.67k stars 261 forks source link

Compound rules may be recorded in ParsingError along with atomic rules #893

Open MucTepDayH16 opened 1 year ago

MucTepDayH16 commented 1 year ago

With the following peg file:

ident = @{ &ASCII_ALPHA ~ (ASCII_ALPHA | ASCII_DIGIT | "_")+ }
integer = @{ ASCII_NONZERO_DIGIT ~ ASCII_DIGIT* | "0" }

ident_index = { ident ~ "[" ~ integer ~ "]" }
value = { ident_index | ident }

I'm trying to parse ident_index with non-matching string, the error ParsingError { positives: [ident], negatives: [] } is produced. How should I specify wether the expected rule is ident_index or ident (or both as in value)?

The only way to do it is marking ident_index as atomic (@). But my goal is to produce rule ident_index with inner: [ident, integer] and with spaces allowed between rules.

Maybe it will be useful to add modifier that will act as normal rule, but will produce itself on rule mismatch within.