Section 4.10 CSN BNF


Below is a BNF of the CSN. In preparing this BNF, the goal was not only to provide strictly the syntax of CSN, but also to provide hints as to the meaning of the constructions through the use of descriptive (and sometimes extra) terminal and non-terminal names.

< schemaDefinition> ::= < definition>
   | < definition> < schemaDefinition>
< definition> ::= < openDefinition> < definitionBody>      < closeDefinition>
< definitionBody> ::= < tupleDefinition>
   | < enumerationDefintion>
   | < domainDefinition>
< tupleDefinition> ::= < parentName> < subclass>
    [< tag>]
    [< subclassing>]
    [< attributes>]
    [< classAttributes>]
    [< defaults>]
    [< restricted>]
    [< constraints>]
    [< classAttributeDefaults>]
    [< classAttributeValues>]
    [< comments>]
< parentName> ::= < className> {< comma> [< whitespace>] < className>}
< className> ::= < upperName> [< schemaID>]
< schemaID> ::= "::" < upperName>
< subclass> ::= "subclass:" < className>
< tag> ::= "tag:" < tagCategory> < tagNumber>
< tagCategory> ::= "universal"
   | "application" 
   |  "private"
< tagNumber> ::= < unsignedInteger>
< attributes> ::= "attributes:" < attributeDef>     {< attributeDef>}
< attributeDef> ::= < attribNameSpec> [< forceType>] < attributeType>
< attributeType> ::= < className>  
   | < stringType>
   | (< multiset>
    "(" [< forcetype>] < className>    | < stringType> ")"
     )
< stringType> ::= "String" [ "("  < unsignedInteger> ")" ]
< multiset> ::= "Multiset"
   | "List"
   | "Set"
   | "IsoList"
   | "IsoSet"
   | "Relation"
< stringType> ::= "String" ["(" < unsignedInteger> ")"]
< attribNameSpec> ::= < attributeName>
   | < optionalAttrib>
< attributeName ::= < lowerName>
< openValueSpec> ::= < openParen>
< closeValueSpec> ::= < closeParen>
< openOptional> ::= < openBracket>
< closeOptional> ::= < closeBracket>
< optionalAttrib> ::= < openOptional> < attributeName> < closeOptional>
< subclassing> ::= "subclassing:" < textString>
< defaults> ::= "defaults:" < defaultSpec> {< defaultSpec>}
< defaultSpec> ::= < attributeName> < setTo> < value>
< value> ::= < textString>
   | < number>
   | < enumtag>
< number> ::= < float>
   | < integer>
< enumTag> ::= < lowerName>
< restricted> ::= "restricted:" < restrictionSpec> {< restrictionSpec>}
< restrictionSpec> ::= < valueRestriction>
   | < typeRestriction>
< valueRestriction> ::= < attribPathName> < setTo> < valueChoice>
< valueChoice> ::= < valueSpec> {< chooser> < valueChoice>}
< valueSpec> ::= < value> | < range>
< range> ::= < lowerBound> ".." < upperBound>
< lowerBound> ::= < integer>
< upperBound> ::= < integer>
< attribPathName>  ::= { < attributeNameSpec> [< multisetMember>] < selector> }
    < attributeNameSpec>
< multisetMember> ::= "{}"
< typeRestriction> ::= < typePathName> < setTo> < typeChoice>
< typeChoice> ::= < typeSpec> {< chooser> < typeChoice> }
< typeSpec> ::= [ < excludeType> | < forceType> ] < className>
< typePathName> ::= [< attributePathName>] 
    (< wildcard> |< selector>  ) < className>
< constraints> ::= "constraints:" < textString>
< comments> ::= "comments:" < textString>
< classAttributeValue> ::= { < attributeName> < setTo> < value> }
< classAttributeValues> ::= "classAttributeValues:" < classAttributeValue>    
{< classAttributeValue>}
< classAttributeDefaults> ::= "classAttributeDefaults:" < classAttributeValue>   
 {< classAttributeValue>}
< enumerationDef> ::= "Enumeration"
    < subclass>
    [< tag>]
    < enumTags>
    [< comments>]
< enumTags> ::= "values:" < tagSpec> {< tagSpec>}
< tagSpec> ::= < enumTag> [< numericRep>]
< numericRep> ::= < openValueSpec> < unsignedInteger> < closeValueSpec>
< domainDefinition> ::= "Domain"
    < subclass>
    [< tag>]
    < primitiveType
    < domainValues>R    [< comments>]< MO>
< primitiveType> ::= "primitiveType:" < className>
< domainValues> ::= "values:" ( < strings> | < integers | < floats> )
< strings> ::= < textString> {< textString> }
< floats> ::= < float> {< float> }
< integers> ::= < integer> {< integer> }



Links to the SAIF 3.1 Specification document and the complete SAIF class list