DMS Software Reengineering Toolkit: Difference between revisions

Content deleted Content added
External links: Pruned EL links per WP:EL
No edit summary
 
(2 intermediate revisions by 2 users not shown)
Line 1:
{{Infobox software
| name =
| title = DMS Software Reengineering Toolkit
| logo =
| screenshot =
Line 21:
| status =
| genre =
| license = proprietaryProprietary
| website = {{URL|http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html}}
}}
Line 29:
 
==Usage==
DMS has been used to implement [[___domain-specific language]]s (such as code generation for factory control), test coverage<ref>[http://www.semanticdesigns.com/Company/Publications/TestCoverage.pdf Branch Coverage for Arbitrary Languages Made Easy]</ref> and profiling tools, [[Duplicate code|clone detection]],<ref>{{Cite journal |url=http://www.computer.org/portal/web/csdl/doi/10.1109/ICSM.1998.738528 |title=''Clone Detection Using Abstract Syntax Trees''. Proceedings International Conference on Software Maintenance 1998 |doi=10.1109/ICSM.1998.738528 |s2cid=12834606 |access-date=2010-11-06 |archive-url=https://web.archive.org/web/20121010231613/http://www.computer.org/portal/web/csdl/doi/10.1109/ICSM.1998.738528 |archive-date=2012-10-10 |url-status=dead |url-access=subscription }}</ref> language migration tools, C++ component reengineering.,<ref>{{cite journal|doi=10.1016/j.infsof.2006.10.012|title=Case study: Re-engineering C++ component models via automatic program transformation|year=2007|last1=Akers|first1=Robert L.|last2=Baxter|first2=Ira D.|last3=Mehlich|first3=Michael|last4=Ellis|first4=Brian J.|last5=Luecke|first5=Kenn R.|journal=Information and Software Technology|volume=49|issue=3|pages=275–291|s2cid=13219993}}</ref> and for research into difficult topics such as refactoring C++ reliably.<ref>[{{Cite web |url=http://www.sbir.gov/sbirsearch/detail/373168 |title=''Small Business Innovation Research (DoE): Refactor++''] |access-date=2013-09-05 |archive-date=2019-12-20 |archive-url=https://web.archive.org/web/20191220202259/https://www.sbir.gov/sbirsearch/detail/373168 |url-status=dead }}</ref>
 
== Features ==
Line 45:
Changes to ASTs can be accomplished by both procedural methods coded in PARLANSE and source-to-source tree transformations coded as [[rewrite rule]]s using surface-syntax conditioned by any extracted program facts, using DMS's Rule Specification Language (RSL). The rewrite rule engine supporting RSL handles associative and commutative rules. A rewrite rule for C to replace a complex condition by the <code>?:</code> operator be written as:
<syntaxhighlight lang="text">
rule simplify_conditional_assignment(v:left_hand_side,e1:expression,e2:expression,e3:expression)
:statement->statement
= " if (\e1) \v=\e2; else \v=e3; "
-> " \v=\e1?\e2:\e3; "
if no_side_effects(v);
</syntaxhighlight>
Rewrite '''rule'''s have names, e.g. '''simplify_conditional_assignment'''. Each rule has a ''"match this"'' and ''"replace by that"'' pattern pair separated by '''->''', in our example, on separate lines for readability. The patterns must correspond to language syntax categories; in this case, both patterns must be of syntax category '''statement''' also separated in sympathy with the patterns by '''->'''. Target language (e.g., C) surface syntax is coded inside meta-quotes '''"''', to separate rewrite-rule syntax from that of the target language. Backslashes inside meta-quotes represent ___domain escapes, to indicate pattern meta variables (e.g., '''\v''', '''\e1''', '''\e2''') that match any language construct corresponding to the metavariable declaration in the signature line, e.g., '''e1''' must be of syntactic category: ''(any) expression''. If a metavariable is mentioned multiple times in the ''match'' pattern, it must match to identical subtrees; the same identically shaped '''v''' must occur in both assignments in the match pattern in this example. Metavariables in the ''replace'' pattern are replaced by the corresponding matches from the left side. A conditional clause '''if''' provides an additional condition that must be met for the rule to apply, e.g., that the matched metavariable '''v''', being an arbitrary left-hand side, must not have a side effect (e.g., cannot be of the form of '''a[i++]'''; the '''no_side_effects''' predicate is defined by an analyzer built with other DMS mechanisms).