scc-0.1: grammar.bnf
Expression ::=
ProducerPrimary {"|" TransducerPrimary} ["|" ConsumerPrimary].
ProducerExpression ::=
ProducerPrimary
| ProducerPrimary "|" TransducerExpression.
ProducerPrimary ::=
"(" NativeCommand ")" ">"
| "cat" Parameters
| "echo" Parameters
| "ls" Parameters
| "stdin"
| "{" [String {"," String}] "}"
| "(" ProducerExpression ")".
ConsumerExpression ::=
ConsumerFork
| TransducerExpression "|" ConsumerFork.
ConsumerFork ::=
ConsumerPrimary {"tee" ConsumerPrimary}.
ConsumerPrimary ::=
"(" ConsumerExpression ")"
| ">" "(" NativeCommand ")"
| "error" [String]
| "null"
| ">" File
| ">>" File.
TransducerExpression ::=
TransducerPrimary {"|" TransducerPrimary}
| TransducerPrimary {"><" TransducerPrimary}.
TransducerPrimary ::=
"(" TransducerExpression ")"
| "id"
| "suppress"
| "count"
| "group"
| "concatenate"
| "uppercase"
| "prepend" String
| "append" String
| "substitute" String
| "select" SplitterPrimary
| "if" SplitterExpression "then" TransducerExpression ["else" TransducerExpression] "end" ["if"]
| "while" SplitterExpression "do" TransducerExpression "end" ["while"]
| "foreach" SplitterExpression "then" TransducerExpression ["else" TransducerExpression] "end" ["foreach"]
| NativeCommand.
SplitterExpression ::=
SplitterPrimary {"&&" SplitterPrimary}
| SplitterPrimary {"||" SplitterPrimary}
| SplitterPrimary {">&" SplitterPrimary}
| SplitterPrimary {">|" SplitterPrimary}
| SplitterPrimary {">," SplitterPrimary}
| SplitterPrimary "having" SplitterPrimary
| SplitterPrimary "having-only" SplitterPrimary
| SplitterPrimary "..." SplitterPrimary
| "first" SplitterPrimary
| "last" SplitterPrimary
| "prefix" SplitterPrimary
| "suffix" SplitterPrimary.
SplitterPrimary ::=
"(" SplitterExpression ")"
| ">!" SplitterPrimary
| "whitespace"
| "line"
| "letters"
| "digits"
| "substring" String
| "nested" SplitterExpression "in" SplitterExpression "end" ["nested"]
| "between" SplitterExpression "and" SplitterExpression "end" ["between"].