LANGUAGE "Imperative Programs": EXTENSION "nsd.vle"; /* Struktur */ RULE prod1: ROOT ::= Procedure END; RULE pDiagram: Procedure ::= ProcedureHead ProcedureBody END; SYMBOL Procedure: persName: VLString EDITWITH ENTRY, persVarDefs: VLString EDITWITH TEXT; RULE help1: ProcedureHead ::= END; RULE help2: ProcedureBody ::= Stmts END; RULE prod2: Stmts ::= Stmt* END; RULE pCommand: Stmt ::= Command END; RULE pIfStmt: Stmt ::= IfStmt END; RULE pWhileStmt: Stmt ::= WhileStmt END; RULE pCaseStmt: Stmt ::= CaseStmt END; RULE prod3: CaseStmt ::= CaseExpr CaseBranch{2} CaseDefault END; RULE prod4: CaseExpr ::= Expr END; RULE pCaseBranch: CaseBranch ::= CaseBranchExpr CaseBranchStmts END; RULE prod5: CaseBranchExpr ::= Expr END; RULE prod6: CaseBranchStmts ::= Stmts END; RULE prod7: CaseDefault ::= Stmts END; RULE prod8: IfStmt ::= IfExpr IfTrue IfFalse END; RULE prod9: IfExpr ::= Expr END; RULE prod10: IfTrue ::= Stmts END; RULE prod11: IfFalse ::= Stmts END; RULE prod12: WhileStmt ::= WhileExpr WhileBody END; RULE prod13: WhileExpr ::= Expr END; RULE prod14: WhileBody ::= Stmts END; RULE prod15: Command ::= END; RULE prod16: Expr ::= END; /* Persistente Attribute */ SYMBOL Command: persCommand: VLString EDITWITH TEXT; SYMBOL Expr: persExpr: VLString EDITWITH TEXT; /* SYMBOL CaseStmt: persExpr: VLString EDITWITH TEXT; SYMBOL CaseBranch: persExpr: VLString EDITWITH TEXT; SYMBOL WhileStmt: persExpr: VLString EDITWITH TEXT; SYMBOL IfStmt: persExpr: VLString EDITWITH TEXT; */ /* Sichten */ VISUAL view1(ROOT): TITLE "Nassi Shneiderman Diagram"; INITARGS "-height 400 -width 500"; BUTTON "Statement" INSERTS pCommand; BUTTON "If" INSERTS pIfStmt; BUTTON "While" INSERTS pWhileStmt; BUTTON "Case" INSERTS pCaseStmt; BUTTON "Case-Branch" INSERTS pCaseBranch; END; VISUAL FlowChartView(ROOT): TITLE "Flow Chart"; INITARGS "-height 400 -width 500"; BUTTON "Statement" INSERTS pCommand; BUTTON "If" INSERTS pIfStmt; BUTTON "While" INSERTS pWhileStmt; BUTTON "Case" INSERTS pCaseStmt; BUTTON "Case-Branch" INSERTS pCaseBranch; END; PROCESS codegen LABEL "Code generation";