Grammar

    0 $accept: BLOB $end

    1 BLOB: BLOB1 HINTS

    2 BLOB1: PROG '{' PROP '}'

    3 PROP: REAL LE SNUMBER
    4     | FIX '(' REAL ',' SINTEGER ')'
    5     | FLT '(' REAL ',' INTEGER ')'
    6     | REAL IN '[' SNUMBER ',' SNUMBER ']'
    7     | REAL IN '?'
    8     | REAL GE SNUMBER
    9     | REAL RDIV REAL IN '[' SNUMBER ',' SNUMBER ']'
   10     | '|' REAL RDIV REAL '|' LE NUMBER
   11     | REAL RDIV REAL IN '?'
   12     | REAL '=' REAL
   13     | PROP AND PROP
   14     | PROP OR PROP
   15     | PROP IMPL PROP
   16     | NOT PROP
   17     | '(' PROP ')'

   18 SNUMBER: NUMBER
   19        | '+' NUMBER
   20        | '-' NUMBER

   21 INTEGER: NUMBER

   22 SINTEGER: SNUMBER

   23 FUNCTION_PARAM: SINTEGER
   24               | IDENT

   25 FUNCTION_PARAMS_AUX: FUNCTION_PARAM
   26                    | FUNCTION_PARAMS_AUX ',' FUNCTION_PARAM

   27 FUNCTION_PARAMS: /* empty */
   28                | '<' FUNCTION_PARAMS_AUX '>'

   29 FUNCTION: FUNID FUNCTION_PARAMS

   30 EQUAL: '='
   31      | FUNCTION '='

   32 PROG: /* empty */
   33     | PROG IDENT EQUAL REAL ';'
   34     | PROG '@' IDENT '=' FUNCTION ';'
   35     | PROG VARID
   36     | PROG FUNID
   37     | PROG '@' VARID
   38     | PROG '@' FUNID

   39 REAL: SNUMBER
   40     | VARID
   41     | IDENT
   42     | FUNCTION '(' REALS ')'
   43     | REAL '+' REAL
   44     | REAL '-' REAL
   45     | REAL '*' REAL
   46     | REAL '/' REAL
   47     | '|' REAL '|'
   48     | SQRT '(' REAL ')'
   49     | FMA '(' REAL ',' REAL ',' REAL ')'
   50     | '(' REAL ')'
   51     | '+' REAL
   52     | '-' REAL

   53 REALS: REAL
   54      | REALS ',' REAL

   55 DPOINTS: SNUMBER
   56        | DPOINTS ',' SNUMBER

   57 DVAR: REAL
   58     | REAL IN INTEGER
   59     | REAL IN '(' DPOINTS ')'

   60 DVARS: DVAR
   61      | DVARS ',' DVAR

   62 PRECOND: REAL NE SINTEGER
   63        | REAL LE SINTEGER
   64        | REAL GE SINTEGER
   65        | REAL '<' SINTEGER
   66        | REAL '>' SINTEGER

   67 PRECONDS_AUX: PRECOND
   68             | PRECONDS_AUX ',' PRECOND

   69 PRECONDS: /* empty */
   70         | '{' PRECONDS_AUX '}'

   71 HINTS: /* empty */
   72      | HINTS REAL IMPL REAL PRECONDS ';'
   73      | HINTS REALS '$' DVARS ';'
   74      | HINTS PROP '$' DVARS ';'
   75      | HINTS '$' DVARS ';'
   76      | HINTS REAL '~' REAL ';'