Constructs & Concepts
Language Design for Flexibility and Reliability
A H B moduleCppSkinhiddenscontext-freestart-symbolsProgramimportsDeclarationsexportssortsTmplClauseClassClausecontext-freesyntaxTmplClauseDecl->Decl cons("TmplDecl") "template""<" TypeParam"," *">"RequiresClause*->TmplClause cons("Template") "requires"Identifier"<" ConceptArgument"," *">"->RequiresClause cons("Requires") "template""<" TypeParam"," *">""type"Identifier->TypeParam cons("TemplateType") ExprDeclarativeSubClause*" ""return"Expr";"" "->Decl cons("DefDecl") "typename"Type->TypePar am prefer,cons("TypeParam") "class"Type->TypeParam prefer,cons("TypeParam") "class"TypeNameTypeParamList?->ClassClause cons("ClassClause") ClassClause->DeclDeclarativemoduleDeclarationsimportsLiteralsConceptsStatementsDataRepresenta{ } { } { tionexp} ortssortsStatDeclarativeExprDeclarativeDec{ } lDeclarativeSubClausecon{ text-freesyntaxSta} tDeclarati{ veSubClau} se*BlockStat->Decl cons("DefDecl"{ ) ExprDeclarativeSubClaus} e*"="Expr";"->Decl cons("DefDecl"){ TypeDeclarativeSub} { Clause*"="}DataRep->Decl cons("DefDec l"){ DeclDeclarativeSubClause*"} "Decl*" "->Decl cons("DefDecl"){ StatDeclarativeSubClause*";"->Decl} cons("NoDefDecl") ExprDeclarativeSubClause*";"->Decl{ } cons("NoDefDecl") TypeDeclarativeSubClause*";"->Decl cons("NoDefDecl") DeclDeclarativeSubClause*";"->Decl cons("NoDefDecl") sortsProcClauseProcNamecontext-freesyntax"procedure"ProcNameProcedureParamList->ProcClause{ cons("ProcClaus} e") ProcClause->StatDeclarativeIdentifier->ProcName"{ = "->ProcName} cons("Assign") sortsFunClauseFunNameconte{ xt-freesyntax"function"TypeFunNameFunctionParamList->FunClause} { } { } cons("FunClause") "define"TypeFunNameF{ unctionParamList->FunClause} cons("FunClause") "define"TypeFunName->FunCl{ } ause cons("FunClause") FunClause->ExprDeclarativeIdentifier->{ } FunNamesortsPredClausePredNamecontext-freesyntax"p{ } redicate"PredNameFunctionParamList->PredClause cons("PredClause") PredClause->ExprD{ eclarativeIdent}ifier->PredNamesortsTypeParamListTypeParamFunctionParamListFunctionParamProcedureParamListProcedureParamPar{ } amModecontext-freesyntax"(" TypeParam"," *")"->TypeParamList cons("Dummy"){ "(" FunctionParam","} *")"->FunctionParamList cons("Dummy"){ "(" ProcedureParam","} *")"->ProcedureParamList{ cons("Dummy") Type->TypeParam} cons("TypeExprParam") TypeIdentifier->TypeParam cons("TypeExprParam") "type"->TypeParam cons("AnonTypeParam") "type"Identifi{er->TypeParam cons("} TypeParam") "type"TypeParamList->TypeParam cons("AnonTypePParam") "type"IdentifierTypeParamList->TypeParam cons("TypePParam") TypeIden tifier->FunctionParam cons("Param"){ Type->FunctionParam} cons("AnonParam"){ ParamModeTypeIdentifier->Proc} { } edureParam prefer,cons("Param"){ } TypeIdentifier->ProcedureParam{ } cons("ObsParam"){ ParamModeTyp} e->ProcedureParam{ prefer,cons("AnonPa} ram") "type"Type->ProcedureParam{ cons("TypeOpParam")} "type"Type->{FunctionParam cons("TypeOpParam")} "obs"->ParamMode{ cons("Obs") "upd"->Param} Mode cons("Upd") "out"->ParamMode{ cons("Out") "exp"->ParamMode} cons("Exp") "giv"->ParamMod{ e cons("Giv") "del"->ParamM} ode cons("Del") "nrm"->ParamMode{ cons("Nrm")} sortsAttrClauseAttributecontext-freesyntax"["{ } Attribute"," *"]"->AttrClause{ cons("Attrs") AttrClause->SubClauseIdentifier->Attrib} { ute cons("Attr")} Identifier"(" Expr"," *")"->Att{ ribute cons("Attr}") sortsAlertClauseAlertNamecontext-freesyntax"guard"Expr->{ } AlertClause cons("G{ uard") "guard""} by"Expr->AlertCl{ause prefer,cons("Gua} rd") "alert"{ AlertName"i} f"Expr->AlertClause{ cons("AlertIf")} "alert"AlertName"unless"Expr{ } ->AlertCl{ ause cons("AlertUnless")} "success""if"Expr->AlertClause{ } {cons("SuccessIf")} "success""unless"Expr->AlertClause cons("SuccessUnless"){ } "fail""if"Expr->AlertClause{ } cons("FailIf") "fail""unless"Expr->AlertCla{ use cons("FailUnle} ss") Identifier->AlertName{ } AlertCla{ use->SubCl}ausesortsForAllClausecontext-freesyntax"forall" TypeParam"," +->ForA{llClause cons("} ForAll") ForAllClause->SubClausesortsVarCla{ useVarN} amecontext-freesyntax"var"TypeVarName->VarClause{ cons("VarClause")} VarClause->ExprDeclarativeIdentif{ ier->VarNamesort }sTypeNameTypeClauseClassClausecontext-freesyntax"type"TypeNameTypeParamList?->TypeClause{ } { cons("TypeClause")} Identifier->TypeNameTypeClause->TypeDeclarative"opens""("{ } Identifier"," {*")"->SubClause cons} ("Opens") "default""(" Identifier"," *")"->SubClause cons("Default") moduledesugarimports{ Magnoliamagn} olia/commonsignatures{ ortsPosAnnotatio} nconstructorsarea:Int*Int*Int*Int*Int*Int->Annotationarea-in-file:String*Pos->AnnotationClass:Name*List(Type)->Sigstrate{ } giesdesugar=magnolia-io(filenam e-option,norm-tree;fix-imports;downup(try(norm0);repeat(preserve-annotation(norm1));try(preserve-annotation(n{ } orm2));strip-anno,try(preserve-annotation(norm-forall+norm-cxx))))ov{ er} ride-tree-handler(s|format)=sfilename-option{ } { =ArgOption(}"-f"+"--filename",where(("-f",)),!"-ff|--filenam{ } efSetsourcefilenametof")norm0:SName([n])->nnorm0:SName(n@[ , | ])->QName(n)norm0:RName(n)->QName(n)norm0:TypeTuple(ts)->Type(Tuple(),ts)norm0:PType(n,ps)->Type(n,ps’)where