v2.6beta (2009-11-16) New sequencing constructs in xgrs: - operator then-left l <; r executing l then r, returning the execution result of l - operator then-right l ;> r executing l then r, returning the execution result of r - decision if{cond; truecase; falsecase} executing cond, on success truecase is executed and its result returned, on failure falsecase is executed and its result returned - if{cond; truecase} which equals if{cond;truecase;true} thus giving a lazy implication Handling of set/map in xgrs: - in contrast to the set/map in models and rules, S/T may be of node/edge typ, giving storages/storagemaps - set/map addition st.add(el)/mp.add(el,val) failing iff el is already contained in set/map - set/map removal st.rem(el)/mp.rem(el), failing iff el is not contained in set - set/map clearing sm.clear() always succeeding - set/map iteration for{el in st; seq} / for{el->val in mp; seq}, failing iff seq fails for at least one el/el->val in the set/map - set/map membership query el in sm succeeding iff el is contained in the set/map - map lookup assignment val=mp[el] assigning the result of a map lookup to a variable, succeeding iff el is contained in mp, otherwise failing, not touching the variable - set/map size assignment sz=sm.size() assigning size to the variable, always succeeding - set/map emptyness query result assignment se=sm.empty() assigning to the variable whether set/map is empty, always succeeding - set/map creation st=set/mp=map, and variable declarations of explicit set/map type, st:set, mp:map, e.g. st:set=set New assignments in xgrs: (currently only interpreted xgrs of GrShell, not compiled rule embedded) - attribute reading in xgrs: toVar = fromVar.attributeName (value semantics) - attribute writing in xgrs: toVar.attributeName = fromVar (value semantics) - constant value/literal assignment: toVar = int|float|double|string|boolean - constants/literals Rewrite part handling of nested patterns: - modify/replace graph elements of nesting pattern are now available in modify/replace of nested alternative/iterated/multiple/optional-patterns - modify/replace of nested alternative/iterated/multiple/optional-patterns can't take parameters any more, better: no need to give them any more, as they can access the rhs elements of the nesting pattern Export/Import: - GRS import/export (and GrShell) now support set/map attribute initialization (example: new :N1($="$0", a = set{"1","2","3"}, b = map{"foo"->true,"bar"->false}) - withvariables parameter for grs export causing variables to get exported; default is nodes/edges only - GXL import/export now supports enum attributes (set/map not supported) Set/Map comparison in rewrite rules: - new set/map comparison operators in rewrite rules: sm1 == sm2 is true iff sm1 equals sm2 (sm1<=sm2 && sm2<=sm1) sm1 != sm2 is true iff sm1 unequal sm2 (at least one entry not available/same in the other set/map) sm1 <= sm2 is true iff sm1 is subset/submap of sm2 (every entry from sm1 is available in sm2) sm1 < sm2 is true iff sm1 is proper subset/submap of smp (sm1<=sm2 && !sm1==sm2) sm1 >= sm2 is true iff sm1 is superset of sm2 (sm2<=sm1) sm1 > sm2 is true iff sm1 is proper superset of sm2 (sm22; for sets/maps) Further changes: - set/map commands in GrShell are deprecated (succeeded by xgrs set/map operators) - set/map-valued attributes are now displayed in yComp, too - now error reported on attempt to delete and return elments allowed to be matched homomorphically - added exitonfailure to GrShell validate command leaving GrShell on failed validation with error code v2.5.1 (2009-09-09) Additions: - subpatterns now support var parameters, too - GrShell now with non-debug/gui-mode and return value - additional checks and warnings in GrGen compiler - GraBaTs 2009 Live Contest Winning Solution ConveyorBeltSystem added - some renaming in examples folder to show case origins Fixes: - usage of var parameters in alternative, iterated - blocks - nested iterated, alternative blocks - elements of enclosing lhs pattern only mentioned in eval of rhs - gxl export (showing in mono glx import exception) - several examples work again (not all, though) - some previously failing tests v2.5 (2009-06-28) Advanced subpattern/subrule features: - iterated block matching contained subpattern as often as possible implemented - multiple block as an iterated block requiring at least one match added - optional block matching contained subpattern (eagerly) at most once implemented - independent block for specifiying positive application conditions implemented - emitpre (before emitting from subpatterns) and emitpost(=emit; after emitting from subpatterns) Im/Export: - import/export commands added to GrShell, porter module added to LibGr - GXL importer and exporter added - EMF / ECore importer added - GRS importer and exporter added New API: - Generation of an action interface per action, implemented by the action class, plus an action-interface-typed member per action in actions class instance - Action interface with exactly typed input parameters, matches object, output parameters (for the match / modify / apply methods) - Old input parameters semantics - silently failing rule application on wrong type - now only available with syntax r(x:ExactType) Semantic changes: - Semantics of negative regarding subpatterns/subrules changed: negative pattern elements get matched independent from the subpatterns utilizing them (explicit patternpath/pattern statement in the negative/independent needed for old behaviour) - hom declarations are inherited into nested negatives/independents now - hom delarations are non-transitive by now (hom(a,b) and hom(b,c) don't cause hom(a,c) unless specified) Examples: - Solution to the GraBaTs 2009 Program Comprehension case study added (including EMF import) - Completed JavaProgramGraphs sample (Grabats 2008 refactoring case solution), including GRS import/export in source code sample - Rewritten ProgramGraphs sample with new iterated construct, added corresponding source code sample - Updated source code samples to the new 2.5 API libGr: - Added short infotags (without displaying attribute name) - The labels of elements can now be removed or set to a constant string GrShell/yComp: - Improved interactivity: debug apply allows to select wildcard elements ? by double clicking at elements in graph viewer yComp - Debugging much more robust to unexpected connection loss - show var implemented - Shell / debugger now showing match parts due to all forms of subpatterns in debug mode / with % - Finally implemented the help command and improved the error handling - Replaced "dump edge labels (on | off)" by "dump edge [only] labels (on | off | )" - Added "dump set node [only] labels (on | off | )" - Added "dump add (node | edge) [only] shortinfotag " Misc: - Changed License to LGPL v3 - Added GrGen syntax highlighting for Notepad++ - Shorthand visited(el) for visited(el, 0) Bugs: - Several smashed v2.1.2 (2009-02-16) Fixes: - don't create elements declared outside alternative if only appearing in modify/replace part v2.1.1 (2009-02-06) Features/API changes/Fixes/Examples: - Added icons for GrGen, GrShell - Added conference scheduling/grabats2008 live contest solution to examples - Added IsAbstract and IsConst to GrGenType, catch attempts to create abstract elements in GrShell v2.1 (2008-12-19) Features: - Added string methods (indexOf, lastIndexOf, length, substring, replace) (see frontend/should_pass/strfunc_001.grg in source release) - Added set and map attribute types (using value semantics) - Inline condition evaluation code to improve performance - Const attributes are now implemented as static to improve performance GrShell: - Added support for set/map variables - Added "setvisited " command - Added "isvisited " command - Removed silent modifier from node/edge creation commands - Added "silence (on|off)" command API changes: - Changed interface of changing-node/edge-attribute handlers because of set/map feature - Provide metainfo about declared enum types Fixes: - Improved compilation time of specifications for large amount of actions - Fixed comment parser in .grg dependency checker - Improved several error messages - Use an own namespace for alternative names - Entity (node/edge/subpattern usage) names now overwrite type names in expressions - Allow . with attr being an GrShell keyword Examples: - Improved layout of Transcription examples - Added (parts of) the petri-net-benchmark from the paper "A Benchmark Evaluation of Incremental Pattern Matching in Graph Transformation" by Varró et al. - Added "Object to Relational Mapping" by Varró et al. Other changes: - Increase stack size of Java frontend and GrShell v2.0 (2008-07-28) Features: - Added support for literals as parameters for XGRSs - Improved performance of matching a bit - Improved performance of rules with return statements - Improved performance of compiled XGRSs (exec statement) - Added -noevents and -noperfinfo options for GrGen.exe disabling firing of events in generated code and counting of matches/rewrites for a small speedup - Added GXL (Graph eXchange Language) to GRS (GrShell script) converter (gxl2grs.exe; an according model must be generated by hand) API changes: - Improved debugger support by using some DebuggerStepThrough and DebuggerDisplay attributes on GraphElements and Types - Allow newlines in XGRS strings (enables use of verbatim strings in user source code to reduce noise caused by string concatenation) Fixes: - Elements used by nameof()-operator if not mentioned otherwise in modify - Allow boolean literals as attribute initializers in "new node/edge" GrShell commands - Retyping in subpattern or alternative case - Do not reserve several libGr/lgspBackend class names Examples: - Added JavaProgramGraphs example, a partial solution of Program Refactoring case of GraBaTs 2008 (contains rules for a specialized GXL dumper making use of the nameof operator and rules inserting helper edges for a nested layout of the program graph assisting the GrShell "group by" dump commands) - Added AntWorld version passing integer constants in exec (_NoGammel) Other changes: - Updated GrShellBenchmarker v2.0 beta 2 (2008-06-24) Features: - Allow assignments of the success of a sequence to a variable (e.g. "res:boolean=(r1 || r2[5])") - Allow boolean variables as sequences (only works in execs, yet) (e.g. "res && r1") - Added visited flags - Added random-match-selector (e.g. "$7[r1]" searches for all matches and then randomly selects 7 of them to be rewritten. "$[r1]" is equivalent to "$1[r1]") - Added nameof()-operator (e.g. "nameof(blub)" yields the name of the graph entity "blub"; "nameof()" yields the name of the graph) Features for GrShell: - Added "silent"" keyword to new node/edge commands to prevent "element successfully created"-messages => Shell scripts creating a lot of elements run much faster when using this keyword (e.g. "new state:State silent" or "new a1 -:Edge-> a2 silent") - Added post build step to grshell to increase stack size to 16MB (so that matching engine can handle much larger recursive structures) - Added visited flags support - Support assignments of "true" and "false" to variables - Added "randomseed" command (e.g. "randomseed 13" sets the random seed to 13 for reproducible results when using the $-operator-prefix or the random-match-selector; "randomseed time" sets the random seed to the current time in ms) - Reduced GrShell overhead of XGRS execution significantly API changes: - Moved PerformanceInfo, MaxMatches, Replace, ApplyRewrite, ApplyGraphRewriteSequence(Sequence), ValidateWithSequence(Sequence) and the events from BaseActions to IGraph - Sequence.Apply now takes an IGraph instead of a BaseActions instance - Removed BaseActions.ApplyGraphRewrite - Added GetNewestActionVersion and SetNewestActionVersion to IGraph (perhaps only temporarily...) - Added AddNode and AddEdge variants to IGraph to allow adding e.g. cloned elements to the graph - Added INode.Adjacent, INode.GetCompatibleAdjacent, INode.GetExactAdjacent and IEdge.GetOther - PerformanceInfo.MatchesFound is now always changed after firing the IGraph.OnMatched event Fixes: - Allow identifiers to begin with an underscore - yComp: Remove related reference nodes, when a node is moved to another subgraph - Don't generate pattern creation functions, when the pattern contains abstract members - Fixed inheritance of same attribute over multiple inheritance paths - Fixed crash of SequenceParser on lexer error - Don't ignore wrong text after correct sequence prefix - Allow to write "r1*" instead of "r1[*]" in execs - Fixed range specifications of the form "[200]" in .gm and .grg files - Fixed the performed rewrites counter for compiled XGRSs (exec) - Replaced exponential constant folding algorithm in Java frontend by a linear-time one Examples: - Updated BusyBeaver API example - Added TranskriptionAbstrakt example (doing transcription on chains instead of chemical structure graphs; Viatra2 R2 solution included) - Added TranskriptionAbstraktNachAtom example (transforming the abstract dna chains of TranskriptionAbstrakt into the chemical structure graphs of Transkription) - Added ProgramGraphs example and API example (implementing program graphs as specified in "Adaptive Star Grammars for Graph Models" plus PullUpMethod refactoring on these program graphs) - Added WeakComponents examples and VisitedExample API example (using visited flags) - Added AntWorld example for GraBats 2008 (using the random-match-selector) Other changes: - Return statements now only allowed after all normal statements; exec/emit statements only as last statements v2.0 beta (2008-04-28) Features: - Introduced subpatterns, alternative patterns, and recursive patterns - Introduced dependent replacement and recursive rules - Introduced "var" parameters and return values for basic types like int and string - Allow expressions as return arguments - Added "arbitrary" and optional "directed" keywords for edge classes - Added "using" statement for models - Implemented dpo/exact/induced also for the new edge kinds - Graph variables are objects now, and not only graph elements anymore Features for GrShell: - Added support for variable assignments with literals - Variable to variable assignments - "show graph" and "dump graph" now use the layouter configured via "debug set layout" API changes: - The classes for Node/Edge and for elements inheriting from Node/Edge now inherit from INode/IEdge directly instead of the IAttributes - Removed obsolete IAttributes - Renamed IGraphModel.Name to IGraphModel.ModelName - Special classes being a graph an a model at the same time are now generated for each model. They also contain specialized element creation methods for each element type - Removed deprecated IDumperFactory - The VCGDumper can now specify a layouter to be used - Added static type property "TypeInstance" to element classes for easier access to the appropriate type instance - Generated C# element class names are not prefixed anymore as long as the would be no name clash (a warning is generated then, too) - Added EdgeType.Directedness property - Renamed Condition to PatternCondition - Added IGraph.Actions property as a currently associated actions object (perhaps only temporarily...) Fixes: - Dangling edges in nested negative patterns - Fixed several frontend tests Examples: - Updated examples - Added "Recursive" example - Added "Transkription" example - Continued Firm-IFConv example (now also using var parameters and return values) Other changes: - Changed License to GPL v3 - The names of the generated model files now depend on the model name v1.4 (2008-03-20) Features: - Introduced the imperative statement "emit" in RHS printing text to the console or to files (see UML2CSP2 example) - Introduced the imperative statement "exec" in RHS executing xgrs' - Introduced abstract members in element types (these members do not have a declared type, hence containing classes are abstract) - Introduced "dpo", "induced" and "exact" modifiers for rules - Introduced "induced" and "exact" statements in rule patterns - "null" is a keyword, now. It represents the default object value - Member initializers in model specification - Added support for external implementations of element types - Updated implicit and explicit casts (see user manual section 5.1) - Nested negative patterns - Undirected edges - Directed "-->" or "<--", undirected "--", arbitrary directed "<-->" and arbitrary "?--?" edges in patterns - Added "maybeDeleted" element annotation to ignore warnings claiming that a returned element could be deleted due to a hom statement Features for GrShell: - Enhanced grouping support: "dump add node [only] group [by [hidden] [[only] [with [only] ]]]", where can be "no", "incoming", "outgoing", or "any". - Allow setting layout options without starting the debugger first - Remember layout options during a session - Save layout options when using "save graph" API changes: - Redesign of type architecture - Direct access to element attributes - Changed namespaces of generated code - Introduced IGraphElement.Valid, IGraphElement.ReplacedByElement, INode.ReplacedByNode, and IEdge.ReplacedByEdge to check, whether elements were deleted or retyped during a rewrite - Removed unused dump fields from BaseActions Fixes: - Returns for test actions - Enums are now allowed as values in '?:'-operators - Fixed dependency calculation for includes in grg-files - GrShell "save graph" command - GrShell debugging of sequences containing "[SomeRule]" - GrShell debugging of element retyping - GrShell "dump (node|edge) only exclude" command - GrShell debugging with grouped nodes - Problems with edge parameters - Handling of abstract element classes - Several cases involving combinations of hom, retype, delete, and return - Output compile warnings also when compilation did not fail Examples: - Added Sierpinksi3 (with parallel rewrite semantics) - Added FiniteStateMachine example - Added UML2CSP2 example using the new emit statement - Added DebugExec example Other changes: - "pattern" part is now directly embedded in rules and tests - Added XML documentation files for Intellisense help in IDEs - Replaced 'include "";' by '#include ""' - ycomp.bat does not need to be edited anymore - Changed syntax for rule application in xgrs: e.g. "%?[(a,b)=R(a,c)]" to "(a,b)=[?%R(a,c)]" v1.3.1 (2007-12-07) Features: - Added "-gensp" option to spBench allowing generation of dynamic searchplans after execution of the initialization xgrs - Stabilized content of generated C# files for better version control - Test actions work now Fixes: - spBench acted on the original graph instead of the cloned version - Clone variables and all statistical information when cloning a graph - Clear variables when clearing a graph - Disabled buggy node reusing as a workaround - Reflexive pattern edges were not always matched correctly v1.3 (2007-11-06) Features: - The reuse optimization reusing deleted elements can now be disabled - Infotags with null values are not displayed anymore - Speedup transactions a bit - GrGen.exe: Renamed -d option to -keep, added -debug and -usefull option - Added options for dumping and commenting generated matcher programs (accessible through properties and "Custom") - Reimplemented LGSPGraph.Clone via copy constructor to allow derived classes to support cloning - Added convenience methods BaseGraph.GetNodeType and BaseGraph.GetEdgeType Features for GrShell: - Added "debug layout" to relayout the graph in yComp - Added "debug get layout options" and "debug set layout option" allowing access to the parameters of the current layouter in yComp Examples: - Added HelloMutex api example - Added YCompExample api example - Added GrIO example - Added AGTIVE example UML2CSP - Added another Sierpinski triangle implementation Tools: - Added spBench, an application to benchmark all possible searchplans for a rule pattern Fixes: - Fixed ASTdapter - Fixed multiline custom commands for GrShell - Fixed xgrs parser not allowing "somerule[1:*]" - Fixed node reusing causing a crash - Disabled debug output of yComp - Fixed NACs only containing an if - Fixed attributes output of VCGDumper - Fixed infotags - Fixed homomorphic matching (testcase hom1 and hom2) - Includes in GRG-files are now also considered as dependencies Specification processing (grgen.jar): Changes: - Improved processing time - Improved error messages - Added new attribute type "object" (only operators '=', '==', and '!=' are allowed) - Warn if a graph element occurs inside and outside a delete statement - Warn if a returned graph element may be matched homomorphically to the same element as an element within a delete statement - "actions" and "model" keywords are now deprecated - Enum declarations may now use already existing enum entries Fixes: - Fixed '?' operator - Fixed errors with C# keywords in models and rules - Fixed rule specification files without any rules - Fixed crash when using a non-existing model v1.2 (2007-07-19) Features: - Introduced xgrs as replacement for grs (GrShell can still handle grs, but prints the new xgrs version for a given grs). See "Developing Graph Transformations with GrGen.NET" for a description of the new graph rewrite sequence syntax. - Restructured directories - Added test bench - GrGen now places the generated libraries into the directory of the spec files by default (can be overridden with -o) - Updated examples Features for GrShell: - The LGSPBackend is the default backend now. So the "select backend ..." line is not necessary anymore in the normal case. - Introduced 'new graph ' which builds the libraries if neccessary and creates graph and actions, superceeding 'new graph ' plus 'select actions '. The latter commands stay available, though. - Added "validate xgrs " which is successful, if the given sequence can be applied successfully on a clone of the current graph (implemented by BaseActions.ValidateWithSequence) - Added "dump add edge exclude" - Added breakpoint support (% flag for rules, true and false in debug mode) - Added breakpoint toggling while debugging (use the 'b' key) - Fixed infotags - Added element exclusion for debug mode - Added support for multiline commands using '\' at the end of a line - Guess .grg extension for "new graph " when does not exist - Guess .grs extensions for files given via commandline API changes: - Renamed GetOutgoing/Incoming to GetCompatibleOutgoing/Incoming - Added GetExactOutgoing/Incoming - Added Apply, ApplyStar, ApplyPlus and ApplyMinMax to IAction Fixes: - Fixed problems with dangling edges in patterns - Fixed retyping with typeof operator - Newly created edges could not be returned - Fixed wrongly reported invalid reuse of nodes and edges in modify part - Annotations on anonymous elements did not work - Fixed error detection for return statements - Fixed comparisons with constant enum expressions - Fixed attributes with names of reserved C# keywords - Fixed casts to strings - Fixed conditions containing casts - Fixed float constants v1.1 (2007-07-02) - Base of change log