The SIRA_PRISE language grammar

The grammar

In this section, the grammar of the SIRA_PRISE commands is presented in BNF form. For a detailed treatment of the individual commands, please see the language reference and tutorial. The following preliminary notes on interpreting the grammar apply :

<SiraPriseCommand> := <Add>|<Delete>|<Update>|<Inquire>|<MultipleAssignment>+
<MultipleAssignment> := CMD(<Add>|<Delete>|<Update>)
<Inquire> := INQUIRE|SELECT <RelationalExpression>[,(<AttributeName>+,)]
<Add> := ASSERT|ADD|CREATE <RelvarName>,<RelationalExpression>
<Delete> := UNASSERT|DELETE|REMOVE <RelvarName>,<RelationalExpression>
<Update> := UPDATE|MODIFY <RelvarName>,<RelationalExpression>,(<ScalarUpdateExpression>+)
<ScalarUpdateExpression> := <AttributeName>(<ScalarExpression>)
<Expression> := <RelationalExpression>|<ScalarExpression>
<RelationalExpression> := <RelvarName>|<AttributeName>|<NamedRelationValueSelector>|<UnNamedRelationValueSelector|<RelationalOperatorExpression>
<NamedRelationValueSelector> := <RelvarName>(<TupleValueSelector>*)
<UnNamedRelationValueSelector> := RELATION(HEADING(<HeadingAttribute>*)BODY(<TupleValueSelector>*))
<HeadingAttribute> := <SHeadingAttribute>|<RHeadingAttribute>
<SHeadingAttribute> := <AttributeName>(<TypeName>)
<RHeadingAttribute> := <AttributeName>(RELATION(HEADING(<HeadingAttribute>*)))
<TupleValueSelector> := TUPLE(<AttributeValueSelector>*)
<AttributeValueSelector> := <AttributeName>(<Expression>)
<RelationalOperatorExpression> := <ROjoin> | <ROunion> | <ROintersect> | <ROminus> | <ROsemiminus> | <ROsemijoin> | <ROrename> | <ROproject> | <ROrestrict> | <ROtclose> | <ROdivideby> | <ROextend> | <ROgroup> | <ROungroup> | <ROaggregate> | <ROSummarizeBy> | <ROTransform> | <ROleftjoin> | <ROxminus>
<ROjoin> := JOIN(<RelationalExpression>,<RelationalExpression>+,)
<ROunion> := UNION(<RelationalExpression>,<RelationalExpression>+,)
<ROintersect> := INTERSECT(<RelationalExpression>,<RelationalExpression>+,)
<ROxminus> := XMINUS(<RelationalExpression>,<RelationalExpression>+,)
<ROminus> := MINUS(<RelationalExpression>,<RelationalExpression>)
<ROsemijoin> := SEMIJOIN(<RelationalExpression>,<RelationalExpression>)
<ROleftjoin> := LEFTJOIN(<RelationalExpression>,<RelationalExpression>,(<AttributeValueSelector>*))
<ROsemiminus> := SEMIMINUS(<RelationalExpression>,<RelationalExpression>)
<ROrename> := RENAME(<RelationalExpression>,(<AttributeNamePair>+,))
<AttributeNamePair> := <AttributeName>,<AttributeName>
<ROproject> := PROJECT(<RelationalExpression>,(<AttributeName>*))
<ROrestrict> := RESTRICT(<RelationalExpression>,<ScalarExpression>)
<ROtclose> := TCLOSE(<RelationalExpression>,(<AttributeNamePair>+,))
<ROdivideby> := DIVIDEBYPER(<RelationalExpression>,<RelationalExpression>,<RelationalExpression>)
<ROextend> := EXTEND(<RelationalExpression>,(<ExtendDef>+))
<ExtendDef> := <AttributeName>(<Expression>)
<ROgroup> := GROUP(<RelationalExpression>,(<GroupDef>+))
<GroupDef> := <AttributeName>(<AttributeName>+,)
<ROungroup> := UNGROUP(<RelationalExpression>,(<AttributeName>+,))
<ROaggregate> := AGGREGATE(<RelationalExpression>,(<AggregationDef>+))
<AggregationDef> := <AttributeName>(<OperatorName>(<Expression>))
<ROSummarizeBy> := SUMMARIZEBY(<RelationalExpression>,(<AttributeName>*,),(<AggregationDef>+))
<ROTransform> := TRANSFORM(<RelationalExpression>,(<TransformDef>*,))
<TransformDef> := <AttributeName>[(<Expression>)]
<ScalarExpression> := <ScalarValueSelector>|<AttributeName>|<ScalarOperatorExpression>
<ScalarValueSelector> := <TypeName>(<LiteralValue>|<PossRepComponent>+)
<PossRepComponent> := <PossRepComponentName>(<LiteralValue>|<ScalarExpression>)
<ScalarOperatorExpression> := <OperatorName>(<Expression>*,)

The following constructs are not explicitly defined in this grammar :

<RelvarName>
<AttributeName>
<TypeName>
<PossRepComponentName>
<OperatorName>
<LiteralValue>

The first five of these are names, and should obey the rules for valid SIRA_PRISE names :

The <LiteralValue> element is, obviously, subjected only to the rule that it must represent a valid value of the type of the value selector that it appears in.

Changes from 1.1

The <CommitCommand> has been dropped.  Commit and rollback have been integrated with the transaction control features available to the client (which is where they really belong). Please consult the appropriate message types in the SIRA_PRISE communication scenario documentation.

Changes from 1.2

New relational operators LEFTJOIN and XMINUS were introduced.

Changes from 1.3

Support for COMPILE and CACHE has been removed.