Optional nodes
To make a node optional, follow it immediately with a ?
, with no space between
the node and the ?
symbol.
Here’s a grammar that matches "future"
or the empty string:
future.peg
grammar Future
root <- "future"?
Here’s a grammar that matches any digit or the empty string:
digit.peg
grammar Digit
root <- [0-9]?
If the optional node is not found in the input, an empty syntax node is returned. Remember an optional node either matches the node or nothing at all; other input will cause an error.
require('./future').parse('future')
== { text: 'future', offset: 0, elements: [] }
require('./future').parse('')
== { text: '', offset: 0, elements: [] }
require('./future').parse('perfect')
SyntaxError: Line 1: expected one of:
- "future" from Future::root
1 | perfect
^