Node:Syntax of Indexicals, Next:, Previous:Syntax Summary, Up:Syntax Summary



Syntax of Indexicals

     X --> variable                { domain variable }
     
     Constant --> integer
       |   inf                         { minus infinity }
       |   sup                         { plus infinity }
     
     Term --> Constant
       |   X                     { suspend until assigned }
       |   min(X)                { min. of domain of X }
       |   max(X)                { max. of domain of X }
       |   card(X)               { size of domain of X }
       |   - Term
       |   Term + Term
       |   Term - Term
       |   Term * Term
       |   Term /> Term               { division rounded up }
       |   Term /< Term               { division rounded down }
       |   Term mod Term
     
     TermSet --> {Term,...,Term}
     
     Range --> TermSet
       |   dom(X)                          { domain of X }
       |   Term..Term                      { interval }
       |   Range/\Range                     { intersection }
       |   Range\/Range                     { union }
       |   \Range                          { complement }
       |   - Range                         { pointwise negation }
       |   Range + Range                   { pointwise addition }
       |   Range - Range                   { pointwise subtraction }
       |   Range mod Range                 { pointwise modulo }
       |   Range + Term                    { pointwise addition }
       |   Range - Term                    { pointwise subtraction }
       |   Term - Range                    { pointwise subtraction }
       |   Range mod Term                  { pointwise modulo }
       |   Range ? Range
       |   unionof(X,Range,Range)
       |   switch(Term,MapList)
     
     ConstantSet --> {integer,...,integer}
     
     ConstantRange --> ConstantSet
       |   Constant..Constant
       |   ConstantRange/\ConstantRange
       |   ConstantRange\/ConstantRange
       |   \ConstantRange
     
     MapList --> []
       |   [integer-ConstantRange|MapList]
     
     CList --> []
       |   [integer|CList]
     
     Indexical --> X in Range
     
     Indexicals --> Indexical
       |   Indexical, Indexicals
     
     ConstraintBody --> Indexicals
        |  LinExpr RelOp LinExpr
        |  element(X,CList,X)
        |  relation(X,MapList,X)
     
     Head --> term  { a compound term with unique variable args }
     
     TellPos --> Head +: ConstraintBody.
     TellNeg --> Head -: ConstraintBody.
     AskPos --> Head +? Indexical.
     AskNeg --> Head -? Indexical.
     
     ConstraintDef -->
           TellPos. [TellNeg.] [AskPos.] [AskNeg.]