lambda-DB: ODL Syntax (in yacc form)


Author: Daniel Grundmann, Fraunhofer ISST.

Specification:   Definition
               | Definition Specification

Definition:   TypeDcl ;
	    | ConstDcl ;
	    | ExceptDcl ;
	    | Interface ;
	    | Module ;
	    | Class ;

Class:	ClassHeader { InterfaceBody }

ClassHeader:	CLASS Id OptTypePropertyList
	     |	CLASS Id EXTENDS ScopedName OptTypePropertyList
	     |	CLASS Id : InheritanceSpec OptTypePropertyList
	     |	CLASS Id : EXTENDS ScopedName : InheritanceSpec OptTypePropertyList

Module:	MODULE Id { Specification }

Interface:	InterfaceDcl
	      | ForwardDcl

InterfaceDcl:   INTERFACE Id : InheritanceSpec { OptInterfaceBody }
	      | INTERFACE Id { OptInterfaceBody }

ForwardDcl:	INTERFACE Id

OptInterfaceBody:
		| InterfaceBody

OptTypePropertyList:
		| TypePropertyList

TypePropertyList:  ( OptExtentSpec OptKeySpec )

OptExtentSpec:
		| ExtentSpec

ExtentSpec:	EXTENT Id

OptKeySpec:
	    | KeySpec

KeySpec:  KEY KeyList
	| KEYS KeyList

KeyList:   Key
	 | Key , KeyList

Key:   	   PropertyName
         | ( PropertyList )

PropertyList:   PropertyName
	      | PropertyName , PropertyList

PropertyName:   Id

AttributeNameList:  AttributeName
		  | AttributeName , AttributeNameList

AttributeName:	Id

InterfaceBody:  Export
	      | Export InterfaceBody

Export:   TypeDcl ;
	| ConstDcl ;
	| ExceptDcl ;
	| AttrDcl ;
	| RelDcl ;
	| OpDcl ;

InheritanceSpec:   ScopedName
		 | ScopedName , InheritanceSpec

ScopedName:   Id
	    | :: Id
	    | ScopedName :: Id

ConstDcl:    CONST ConstType Id = ConstExp

ConstType:   IntegerType
	   | CharType
	   | BooleanType
	   | FloatingPtType
	   | StringType
	   | ScopedName

ConstExp: OrExpr

OrExpr:   XOrExpr
	| OrExpr | XOrExpr

XOrExpr:   AndExpr
	 | XOrExpr ^ AndExpr

AndExpr:   ShiftExpr
	 | AndExpr & ShiftExpr

ShiftExpr: AddExpr
	 | ShiftExpr >> AddExpr
	 | ShiftExpr << AddExpr

AddExpr:   MultExpr
	 | AddExpr + MultExpr
	 | AddExpr - MultExpr

MultExpr:   UnaryExpr
	  | MultExpr * UnaryExpr
	  | MultExpr / UnaryExpr
	  | MultExpr % UnaryExpr

UnaryExpr:   UnaryOperator PrimaryExpr
	   | PrimaryExpr

UnaryOperator:   -
	       | +
	       | ~

PrimaryExpr:   ScopedName
	     | Literal
	     | ( ConstExp )

Literal:   IntegerLiteral
	 | StringLiteral
	 | CharacterLiteral
	 | FloatingPtLiteral
	 | BooleanLiteral

BooleanLiteral:   TRUE
		| FALSE

PositiveIntConst: ConstExp

TypeDcl:   TYPEDEF TypeDeclarator
	 | StructType
	 | UnionType
	 | EnumType

TypeDeclarator: TypeSpec Declarators

TypeSpec:   SimpleTypeSpec
	  | ConstrTypeSpec

SimpleTypeSpec:   BaseTypeSpec
		| TemplateTypeSpec
		| ScopedName

BaseTypeSpec:   FloatingPtType
	      | IntegerType
	      | CharType
	      | BooleanType
	      | OctetType
	      | AnyType
	      | DATE
	      | TIME
	      | INTERVAL
	      | TIMESTAMP

TemplateTypeSpec:   ArrayType
		  | StringType
		  | CollType

CollType:  SET < SimpleTypeSpec >
	 | LIST < SimpleTypeSpec >
	 | BAG < SimpleTypeSpec >
	 | DICTIONARY < SimpleTypeSpec , SimpleTypeSpec >

ConstrTypeSpec:   StructType
		| UnionType
		| EnumType

Declarators:   Declarator
	     | Declarator , Declarators

Declarator:   SimpleDeclarator
	    | ComplexDeclarator

SimpleDeclarator: Id

ComplexDeclarator: ArrayDeclarator

FloatingPtType:   FLOAT
		| DOUBLE

IntegerType:   SignedInt
	     | UnsignedInt

SignedInt:   SignedLongInt
	   | SignedShortInt

SignedLongInt:  LONG

SignedShortInt: SHORT

UnsignedInt:   UnsignedLongInt
	     | UnsignedShortInt

UnsignedLongInt: UNSIGNED LONG

UnsignedShortInt: UNSIGNED SHORT

CharType: 	CHAR

BooleanType: 	BOOLEAN

OctetType: 	OCTET

AnyType: 	ANY

StructType: 	STRUCT Id { MemberList }

MemberList:   	Member
	      | Member MemberList

Member: 	TypeSpec Declarators ;

UnionType: 	UNION Id SWITCH ( SwitchTypeSpec ) { SwitchBody }

SwitchTypeSpec:   IntegerType
		| CharType
		| BooleanType
		| EnumType
		| ScopedName

SwitchBody:   	Case
	      | Case SwitchBody

Case:	CaseLabelList ElementSpec ;

CaseLabelList:   CaseLabel
	       | CaseLabel CaseLabelList

CaseLabel:   CASE ConstExp :
	   | DEFAULT :

ElementSpec: TypeSpec Declarator

EnumType: ENUM Id { EnumeratorList }

EnumeratorList:   Enumerator
		| Enumerator , EnumeratorList

Enumerator: Id

ArrayType:   ARRAY < SimpleTypeSpec , PositiveIntConst >
	   | SEQUENCE < SimpleTypeSpec , PositiveIntConst >
	   | ARRAY < SimpleTypeSpec >
	   | SEQUENCE < SimpleTypeSpec >

StringType:   STRING < PositiveIntConst >
	    | STRING

ArrayDeclarator: Id ArraySizeList

ArraySizeList:   FixedArraySize
	       | FixedArraySize ArraySizeList

FixedArraySize: LEPAR PositiveIntConst REPAR

AttrDcl:   READONLY ATTRIBUTE DomainType FixedArraySize AttributeNameList
	 | ATTRIBUTE DomainType FixedArraySize AttributeNameList
	 | READONLY ATTRIBUTE DomainType AttributeNameList
	 | ATTRIBUTE DomainType AttributeNameList

DomainType:   SimpleTypeSpec
	    | StructType
	    | EnumType
	    | SET < Literal >
	    | LIST < Literal >
	    | BAG < Literal >

RelDcl:   RELATIONSHIP TargetOfPath TraversalPathName1 OptInverseTraversalPath

TraversalPathName1: Id

TargetOfPath:   Id
	      | RelCollectionType < Id >

OptInverseTraversalPath:
			 | INVERSE Id :: TraversalPathName2

TraversalPathName2: Id

AttributeList:   ScopedName
	       | ScopedName , AttributeList

RelCollectionType:   SET
		   | LIST
		   | BAG

ExceptDcl: EXCEPTION Id { OptMemberList }

OptMemberList:
	       | MemberList

OpDcl:   OpAttribute OpTypeSpec Id ParameterDcls RaisesExpr ContextExpr
       | OpTypeSpec Id ParameterDcls RaisesExpr ContextExpr
       | OpAttribute OpTypeSpec Id ParameterDcls ContextExpr
       | OpAttribute OpTypeSpec Id ParameterDcls RaisesExpr
       | OpTypeSpec Id ParameterDcls ContextExpr
       | OpAttribute OpTypeSpec Id ParameterDcls
       | OpTypeSpec Id ParameterDcls RaisesExpr 
       | OpTypeSpec Id ParameterDcls

OpAttribute: ONEWAY

OpTypeSpec:   SimpleTypeSpec
	    | VOID

ParameterDcls:   ( ParamDclList )
	       | ( )

ParamDclList:   ParamDcl
	      | ParamDcl , ParamDclList

ParamDcl: ParamAttribute SimpleTypeSpec Declarator

ParamAttribute:   IN
		| OUT
		| INOUT

RaisesExpr: 	RAISES ( ScopedNameList )

ScopedNameList:   ScopedName
		| ScopedName , ScopedNameList

ContextExpr: 	CONTEXT ( StringLiteralList )

StringLiteralList:   StringLiteral
		   | StringLiteral , StringLiteralList


Last modified: 1/20/99 by Leonidas Fegaras