packages feed

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"].