Content deleted Content added
Demonkoryu (talk | contribs) m →External links: ... |
No edit summary |
||
(38 intermediate revisions by 26 users not shown) | |||
Line 1:
{{Infobox software
| name =
| title = DMS Software Reengineering Toolkit
| logo =
| screenshot =
| caption =
| collapsible =
| author =
| developer = Semantic Designs
| released = <!-- {{Start date|YYYY|MM|DD|df=yes/no}} -->
| discontinued =
| latest release version =
| latest release date = <!-- {{Start date and age|YYYY|MM|DD|df=yes/no}} -->
| latest preview version =
| latest preview date = <!-- {{Start date and age|YYYY|MM|DD|df=yes/no}} -->
| programming language =
| operating system =
| platform =
| size =
| language =
| status =
| genre =
| license = Proprietary
}}
The '''DMS Software Reengineering Toolkit''' is a proprietary set of [[program transformation]] tools available for automating custom source program analysis, modification, translation or generation of software systems for arbitrary mixtures of source languages for large scale software systems.<ref>[http://portal.acm.org/citation.cfm?id=999466&dl=GUIDE&coll=GUIDE&CFID=55567354&CFTOKEN=76359207 ''DMS: Program Transformations for Practical Scalable Software Evolution''. Proceedings International Conference on Software Engineering 2004] [http://www.semanticdesigns.com/Company/Publications/DMS-for-ICSE2004-reprint.pdf Reprint]</ref> DMS was originally motivated by a theory for maintaining designs of software called ''Design Maintenance Systems.''<ref>[http://portal.acm.org/citation.cfm?id=129859 ''Design Maintenance Systems''. Communications of the ACM 1992][http://www.semanticdesigns.com/Company/Publications/DMS-CACM-1992-baxter.pdf Reprint]
==Usage==
The Toolkit provides means for defining language grammars and will produce [[parsers]] which automatically construct [[abstract syntax trees]] (ASTs), and [[prettyprinter]]s to convert original or modified ASTs back into compilable source text. The parse trees capture, and the prettyprinters regenerate complete detail about the original source program, including source position, comments, radix and format of numbers, etc. to ensure that regenerated source text is as recognizable to a programmer as the original text modulo any applied transformations.▼
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 ==
▲The
DMS provides attribute evaluators for computing custom analyses over ASTs, such as metrics, and including special support for [[symbol table]] construction. Other program facts can be extracted by built-in control- and data- [[flow analysis]] engines, local and global [[pointer analysis]], whole-program [[call graph]] extraction, and symbolic range analysis by [[abstract interpretation]].▼
DMS uses [[GLR parser|GLR]] parsing technology with semantic predicates. This enables it to handle all context-free grammars as well as most non-context-free language syntaxes, such as [[Fortran]], which requires matching of multiple DO loops with shared CONTINUE statements by label to produce ASTs for correctly nested loops as it parses. DMS has a variety of predefined language front ends, covering most real dialects of [[C (programming language)|C]] and [[C++]] including [[C++0x]], [[C Sharp (programming language)|C#]], [[Java (programming language)|Java]], [[Python (programming language)|Python]], [[PHP]], [[EGL (programming language)|EGL]], [[Fortran]], [[COBOL]], [[Visual Basic]], [[Verilog]], [[VHDL]] and some 20 or more other languages. DMS can handle [[ASCII]], [[ISO-8859]], [[UTF-8]], [[UTF-16]], [[EBCDIC]], [[Shift-JIS]] and a variety of Microsoft character encodings.
Changes to ASTs can be accomplished by both procedural methods coded in PARLANSE and rule driven surface-syntax tree transformations, conditioned by any of the extracted program facts. The rule engine handles associative and commutative rules.▼
▲DMS provides [[attribute grammar]] evaluators for computing custom analyses over ASTs, such as metrics, and
A [http://www.semanticdesigns.com/Products/DMS/SimpleDMSDomainExample.html complete example] of a language definition and source-to-source transformation rules defined and applied is shown using high school [[Algebra]] and a bit of [[Calculus]] as a [[___domain-specific language]].▼
DMS is implemented in a [[parallel programming]] language, PARLANSE, which allows using [[symmetric multiprocessing]] to speed up large analyses and conversions.<ref>{{cite web |title=Semantic Designs: PARLANSE Parallel Programming Language for Windows Pentium/80x86 |url=http://www.semanticdesigns.com/Products/Parlanse/index.html |website=www.semanticdesigns.com}}</ref>
=== Rewriting ===
▲Changes to ASTs can be accomplished by both procedural methods coded in PARLANSE and source-to-source tree transformations coded as [[rewrite rule]]s
<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).
Achieving a complex transformation on code is accomplished by providing a number of rules that cooperate to achieve the desired effect. The ruleset is focused on portions of the program by metaprograms coded in PARLANSE.
▲(DMS and "Design Maintenance System" are registered trademarks of [[Semantic Designs]])
▲A
== References ==▼
{{Reflist}}▼
==External links==
* [http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html DMS Software Reengineering Toolkit main web page]
▲* [http://www.semanticdesigns.com/Products/Parlanse/index.html PARLANSE]
{{DEFAULTSORT:Dms Software Reengineering Toolkit}}
[[Category:Static program analysis tools]]
[[Category:Program transformation tools]]
[[Category:Computer-aided software engineering tools]]
[[Category:Language workbench]]
▲== References ==
▲{{Reflist}}
|