otto/crates/parser/src/pipeline.pest

39 lines
833 B
Plaintext

// The pipeline PEG
pipeline = _{ SOI ~ "pipeline" ~
BLOCK_BEGIN ~
execBlocks ~
BLOCK_END ~ EOI }
execBlocks = { (stage | steps)* }
stage = { "stage" ~
BLOCK_BEGIN ~
(property*) ~
steps ~
BLOCK_END }
steps = { "steps" ~ BLOCK_BEGIN ~ step+ ~ BLOCK_END }
step = { IDENT ~ (
args
| kwargs
)
}
args = { (STR ~ COMMA?)+ }
kwargs = _{ (kwarg ~ COMMA?)+ }
kwarg = { IDENT~ ":" ~ STR }
property = { IDENT ~ "=" ~ STR }
IDENT = @{ ASCII_ALPHA ~ (ASCII_ALPHANUMERIC | "_")* }
BLOCK_BEGIN = @{ "{" }
BLOCK_END = @{ "}" }
STR = { "'" ~ STRV ~ "'" }
STRV = @{ "''" | (!"'" ~ ANY)* }
COMMA = @{ "," }
WHITESPACE = _{ (" " | NEWLINE) }
COMMENT = _{ "//" ~ (!NEWLINE ~ ANY)* }