39 lines
833 B
Plaintext
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)* }
|