LANGUAGE "Streets": EXTENSION "streets.vle"; /* Diese Datei enthaelt die abstrakte Struktur von Streets sowie grammatiknahe Eigenschaften der visuellen Sichten. Die hier aufgefuehrten persistenten Attributen sind semantisch relevant oder werden zumindest in mehreren Sichten benoetigt (z.B. persName). Sekundaere persistente Attribute werden in den entprechenden Spezifikationsdateien fuer die Sichten definiert. Sekundaere Attribute sind im check-Attributauswerter zu finden. */ /********************************************************** Baumstruktur und lokale Attribute */ /* Prorammelemente =============== */ RULE: ROOT ::= ProgramDefinition END; RULE: ProgramDefinition ::= Components ComputerMappings END; RULE: ComputerMappings ::= VirtualComputer* END; RULE pVirtualComputer: VirtualComputer ::= END; RULE: Components ::= Component* END; RULE pTask: Component ::= Task END; RULE pProcedure: Component ::= Procedure END; RULE pType: Component ::= Type END; SYMBOL ProgramDefinition: persSmoothLines: VLInt EDITWITH CHECKBOX; SYMBOL VirtualComputer: persName: VLString EDITWITH ENTRY, persRealComputerName: VLString EDITWITH ENTRY; /* Typen ===== */ RULE: Type ::= TypeDefinition END; RULE: TypeDefinition ::= TypeName TypeDefinitionBody END; RULE: TypeName ::= END; RULE: TypeDefinitionBody ::= TypeDescription END; RULE: TypeDescription ::= END; RULE pArray: TypeDescription ::= Array END; RULE pPortType: TypeDescription ::= PortType END; RULE pStruct: TypeDescription ::= Struct END; RULE pTypeApplication: TypeDescription ::= TypeApplication END; RULE pInteger: TypeDescription ::= Integer END; RULE pFloat: TypeDescription ::= Float END; RULE pString: TypeDescription ::= String END; RULE: Array ::= ArrayBody END; RULE: ArrayBody ::= TypeDescription END; RULE: PortType ::= PortTypeBody END; RULE: PortTypeBody ::= TypeDescription END; RULE: Struct ::= StructElement+ END; RULE pStructElement: StructElement ::= StructElementName StructElementType END; RULE: StructElementName ::= END; RULE: StructElementType ::= TypeDescription END; RULE: TypeApplication ::= END; RULE: Integer ::= END; RULE: Float ::= END; RULE: String ::= END; SYMBOL TypeName: persName: VLString EDITWITH ENTRY, persColor: VLString EDITWITH COLOR; SYMBOL StructElementName: persName: VLString EDITWITH ENTRY; /* Komponenten =========== */ RULE: Procedure ::= ProcedureDefinition END; RULE: ProcedureDefinition ::= ProcedureName ProcedureInterface SubElements ProcedureCode Connection* LineSpace1 LineSpace2 END; RULE: ProcedureCode ::= FormalParameterRoot Constructor CodeBody END; RULE: FormalParameterRoot ::= FormalParameter END; RULE: Task ::= TaskDefinition END; RULE: TaskDefinition ::= TaskName Topology TaskInterface SubElements TaskCode Connection* LineSpace1 LineSpace2 END; RULE: TaskCode ::= Constructor CodeBody END; RULE: TaskName ::= END; RULE: ProcedureName ::= END; RULE: TopologyDefinition ::= END; RULE: Constructor ::= END; RULE pConnection: Connection ::= END; RULE: Topology ::= TopologyDefinition END; RULE: CodeBody ::= Stmts END; RULE: LineSpace1 ::= END; RULE: LineSpace2 ::= END; SYMBOL TaskName: persName : VLString EDITWITH ENTRY; SYMBOL ProcedureName: persName : VLString EDITWITH ENTRY; SYMBOL Sequential: persDescription: VLString EDITWITH TEXT, persCode : VLString EDITWITH TEXT; SYMBOL Constructor: persCode : VLString EDITWITH TEXT; /* Formale Parameter ================= */ RULE: FormalParameter ::= FormalParamHeadline FormalParamTable END; RULE: FormalParamHeadline ::= END; RULE: FormalParamTable ::= FormalParamHeadName FormalParamHeadType FormalParamElem* END; RULE pFormalParamElem: FormalParamElem ::= FormalParamName FormalParamType END; RULE: FormalParamHeadName ::= END; RULE: FormalParamHeadType ::= END; RULE: FormalParamName ::= END; RULE: FormalParamType ::= END; SYMBOL FormalParamName: persName: VLString EDITWITH ENTRY; /* Interfaces ========== */ RULE: TaskInterface ::= Port* END; RULE: ProcedureInterface ::= Port* END; RULE pNormalPort: Port ::= NormalPort END; RULE pTopologyPort: Port ::= TopologyPort END; RULE: NormalPort ::= END; RULE: TopologyPort ::= END; SYMBOL NormalPort: persName : VLString EDITWITH ENTRY, persDimension : VLInt EDITWITH ENTRY, persDirection : VLInt EDITWITH OPTION ("in","out"); SYMBOL TopologyPort: persName : VLString EDITWITH ENTRY, persDimension : VLInt EDITWITH ENTRY, persDirection : VLInt EDITWITH OPTION ("in","out"); /* Subtasks und ProcedureCalls =========================== */ RULE: SubElements ::= SubElement* END; RULE pSubtask: SubElement ::= Subtask END; RULE pCollector: SubElement ::= Collector END; RULE: Collector ::= END; RULE: ProcedureCall ::= ProcedureCallValues ProcedureCallPorts END; RULE: ProcedureCallValues ::= ProcedureCallHeadline ProcedureCallArgs END; RULE: ProcedureCallArgs ::= ProcedureCallArgNameHead ProcedureCallArgTypeHead ProcedureCallArgValueHead ProcedureCallArg* END; RULE pProcedureCallArg: ProcedureCallArg ::= ProcedureCallArgName ProcedureCallArgType ProcedureCallArgValue END; RULE: ProcedureCallArgNameHead ::= END; RULE: ProcedureCallArgTypeHead ::= END; RULE: ProcedureCallArgValueHead ::= END; RULE: ProcedureCallHeadline ::= END; RULE: ProcedureCallArgName ::= END; RULE: ProcedureCallArgType ::= END; RULE: ProcedureCallArgValue ::= END; RULE: Subtask ::= SubtaskWestPorts SubtaskEastPorts SubtaskName END; RULE: SubtaskName ::= END; RULE: ProcedureCallPorts ::= SubcomponentPorts END; RULE: SubtaskWestPorts ::= SubcomponentPorts END; RULE: SubtaskEastPorts ::= SubcomponentPorts END; RULE: SubcomponentPorts ::= SubcomponentPort* END; RULE pSubport: SubcomponentPort ::= END; SYMBOL Subtask: persName : VLString EDITWITH ENTRY, persInstance : VLInt EDITWITH OPTION ("single","topology"); SYMBOL ProcedureCallArgValue: persCode : VLString EDITWITH TEXT; /* Anweisungen =========== */ RULE: Stmts ::= Stmt* END; RULE pSend: Stmt ::= Send END; RULE pReceive: Stmt ::= Receive END; RULE pSequential: Stmt ::= Sequential END; RULE pLoop: Stmt ::= Loop END; RULE pIfCascade: Stmt ::= IfCascade END; RULE pProcedureCall: Stmt ::= ProcedureCall END; RULE: IfCascade ::= IfBranch+ ElseBranch END; RULE pIfBranch: IfBranch ::= IfExpr IfBody END; RULE: IfBody ::= Stmts END; RULE: ElseBranch ::= Stmts END; RULE: Loop ::= LoopBody END; RULE: LoopBody ::= Stmts END; RULE: IfExpr ::= END; RULE: Receive ::= END; RULE: Send ::= END; RULE: Sequential ::= END; SYMBOL IfBranch: persCondition : VLString EDITWITH TEXT; SYMBOL Loop: persLoopInit : VLString EDITWITH TEXT, persLoopCondition: VLString EDITWITH TEXT, persPostIteration: VLString EDITWITH TEXT; /*************************************************************************** Querbeziehungen */ /* Prozeduraufrufe und Subtasks ============================ */ SYMBOL Task: persComponentDefInstConnection: DEFTABLEKEY; SYMBOL Subtask: persComponentDefInstConnection: DEFTABLEKEY; SYMBOL Procedure: persComponentDefInstConnection: DEFTABLEKEY; SYMBOL ProcedureCall: persComponentDefInstConnection: DEFTABLEKEY; SYMBOL NormalPort: persComponentInterfaceDefInstConnection: DEFTABLEKEY; SYMBOL SubcomponentPort: persComponentInterfaceDefInstConnection: DEFTABLEKEY; SYMBOL FormalParamElem: persComponentInterfaceDefInstConnection: DEFTABLEKEY; SYMBOL ProcedureCallArg: persComponentInterfaceDefInstConnection: DEFTABLEKEY; /* Typen ===== */ SYMBOL TypeApplication: persTypeDefInstConnection: DEFTABLEKEY; SYMBOL Type: persTypeDefInstConnection: DEFTABLEKEY; SYMBOL NormalPort: persTypeDefInstConnection: DEFTABLEKEY EDITWITH LISTBOX; SYMBOL TopologyPort: persTypeDefInstConnection: DEFTABLEKEY EDITWITH LISTBOX; SYMBOL FormalParamType: persTypeDefInstConnection: DEFTABLEKEY EDITWITH LISTBOX; /* Virtuelle Computer ================== */ SYMBOL VirtualComputer: persComputerDefInstConnection: DEFTABLEKEY; SYMBOL Subtask: persComputerDefInstConnection: DEFTABLEKEY EDITWITH LISTBOX; /* Linien-Verbindungen =================== */ SYMBOL Connection: persFrom : DEFTABLEKEY, persTo : DEFTABLEKEY; SYMBOL Send: persEndpoint : DEFTABLEKEY; SYMBOL Receive: persEndpoint : DEFTABLEKEY; SYMBOL NormalPort: persEndpoint : DEFTABLEKEY; SYMBOL TopologyPort: persEndpoint : DEFTABLEKEY; SYMBOL SubcomponentPort: persEndpoint : DEFTABLEKEY; SYMBOL Collector: persEndpoint : DEFTABLEKEY; /********************************************************************************** Sichten */ VISUAL ProgramView(ROOT): TITLE "Program elements"; INITARGS "-height 350 -width 500"; BUTTON "Procedure" INSERTS pProcedure; BUTTON "Task" INSERTS pTask; BUTTON "Type" INSERTS pType; BUTTON "Virtual Computer" INSERTS pVirtualComputer; END; VISUAL ComponentView(Component): TITLE "Component definition"; INITARGS "-height 450 -width 500"; BUTTON "Send" INSERTS pSend; BUTTON "Receive" INSERTS pReceive; BUTTON "Sequential" INSERTS pSequential; BUTTON "Loop" INSERTS pLoop; BUTTON "If Cascade" INSERTS pIfCascade; BUTTON "If Branch" INSERTS pIfBranch; BUTTON "Port" INSERTS pNormalPort; BUTTON "Topology Port" INSERTS pTopologyPort; BUTTON "Assembly Point" INSERTS pCollector; DROPPING Task INSERTS pSubtask; DROPPING Procedure INSERTS pProcedureCall; END; VISUAL TopologyView(Topology): TITLE "Topology definition"; END; VISUAL TypeView(Type): TITLE "Type definition"; BUTTON "Array" INSERTS pArray; BUTTON "Port" INSERTS pPortType; BUTTON "Struct" INSERTS pStruct; BUTTON "StructElement" INSERTS pStructElement; BUTTON "Integer" INSERTS pInteger; BUTTON "Float" INSERTS pFloat; BUTTON "String" INSERTS pString; DROPPING Type INSERTS pTypeApplication; END; VISUAL FormalParamView(FormalParameterRoot): TITLE "Formal parameter definition"; INITARGS "-width 450"; BUTTON "Parameter" INSERTS pFormalParamElem; END; VISUAL ProcedureCallView(ProcedureCall): TITLE "Actual parameter"; END;