DMS 소프트웨어 리엔지니어링 툴킷

DMS Software Reengineering Toolkit
DMS 소프트웨어 리엔지니어링 툴킷
개발자의미론적 설계
면허증소유의
웹사이트www.semanticdesigns.com/Products/DMS/DMSToolkit.html

DMS Software Rengineering Toolkit[1] 대규모 소프트웨어 시스템의 소스 언어의 임의 혼합을 위한 소프트웨어 시스템의 사용자 정의 소스 프로그램 분석, 수정, 변환 또는 생성을 자동화하는 데 사용할 수 있는 프로그램 변환 툴의 독점 세트다.DMS는 원래 Design Maintenance Systems라고 불리는 소프트웨어의 설계를 유지하기 위한 이론에 의해 동기 부여되었다.[2]DMS 및 "Design Maintenance System"은 Semantic Designs의 등록 상표다.

사용법

DMS는 도메인별 언어(공장 제어를 위한 코드 생성 등), 시험 범위[3] 및 프로파일링 도구, 클론 탐지,[4] 언어 마이그레이션 도구, C++ 구성요소 리엔지니어링, [5]리팩터링 C++와 같은 어려운 주제에 대한 연구를 신뢰성 있게 구현하기 위해 사용되어 왔다.[6]

특징들

툴킷은 언어 그래머를 정의하기 위한 수단을 제공하며, 추상 구문 트리(AST)를 자동으로 구성하는 파서, 원본 또는 수정된 AST를 다시 컴파일 가능한 원본 텍스트로 변환하는 예쁜 포인터를 생산한다.파스 트리는 원본 텍스트가 적용된 변환과 마찬가지로 프로그래머가 인식할 수 있도록 원본 텍스트가 원본 텍스트처럼 인식되도록 하기 위해 원본 위치, 주석, 라디스와 숫자 형식 등을 포함한 원본 프로그램에 대한 세부 정보를 캡처하고 재생한다.

DMS는 의미 술어가 있는 GLR 파싱 기술을 사용한다.이를 통해 Fortran과 같은 대부분의 비 컨텍스트 언어 구문뿐만 아니라 모든 문맥 없는 그래머를 처리할 수 있으며, 이를 위해서는 파싱할 때 정확하게 중첩된 루프를 위한 AST를 생성하기 위해 레이블별로 공유된 CONTENT 문장과 여러 DO 루프를 일치시켜야 한다.DMS는 C++0x, C#, Java, Python, PHP, EGL, Fortran, COBOL, Visual Basic, Verilog, VHDL 및 20개 이상의 다른 언어를 포함한 대부분의 실제 방언과 C+++의 사전 정의된 언어 프런트 엔드를 포함한다.DMS는 ASCII, ISO-8859, UTF-8, UTF-16, EBCDIC, Shift-JIS 및 다양한 Microsoft 문자 인코딩을 처리할 수 있다.

DMS는 지표와 같은 AST에 대한 사용자 정의 분석을 계산하기 위한 속성 문법 평가자를 제공하고 기호구성에 대한 지원을 포함한다.기타 프로그램 사실은 내장된 제어 및 데이터 흐름 분석 엔진, 로컬 및 글로벌 포인터 분석, 전체 프로그램 콜 그래프 추출, 추상적 해석에 의한 심볼 범위 분석 등을 통해 추출할 수 있다.

DMS는 PARLANSE라는 병렬 프로그래밍 언어로 구현되어 대칭 다중 처리를 사용하여 대규모 분석 및 변환 속도를 높일 수 있다.[7]

재작성

AST에 대한 변경은 PARLANSE에서 코딩된 절차적 방법과 추출된 프로그램 사실에 의해 조건화된 표면-동기화 조건을 사용하여 다시 쓰기 규칙으로 코딩된 소스-소스 트리 변환을 모두 DMS의 RSL(Rule Specification Language)를 사용하여 수행할 수 있다.RSL을 지원하는 재작성 규칙 엔진은 연관 규칙과 대응 규칙을 처리한다.C가 복잡한 조건을 다음으로 대체하는 재작성 규칙?:연산자는 다음과 같이 기록된다.

   rule simply_reason_side(v:left_hand_side, e1:195, e2:195, e3:196) : (\e1) \v=\e2; 기타 \v=e3; " -> \v=\e1?\e2:\e3; "아니오_side_limits(v)인 경우;

재작성 규칙에는 이름이 있다(예: simply_conditional_assignment).각 규칙에는 가독성을 위해 별도의 줄에 ->로 구분된 "이것과 일치""그것으로 교체" 패턴 쌍이 있다.패턴은 언어 구문 범주에 대응해야 한다. 이 경우, 두 패턴은 -에 의한 패턴과 일치하여 구문 범주 문장이 되어야 한다.대상 언어(예: C) 표면 구문은 메타-쿼터 " 내부에서 코드화되어 대상 언어의 구문과 다시 쓰기-규칙 구문을 구분한다.메타-쿼터 내부의 백슬래시는 도메인 이탈을 나타내며, 서명 라인의 메타 선언에 해당하는 언어 구성과 일치하는 패턴 메타 변수(예: \v, \e1, \e2)를 나타낸다. 예를 들어, e1은 구문 범주: (any) 표현식이어야 한다.일치 패턴에서 메타바리블이 여러 번 언급되면 동일한 하위 트리와 일치해야 한다. 이 예에서는 일치 패턴의 두 할당에서 동일한 모양의 v가 발생해야 한다.교체 패턴의 메타바리블은 왼쪽에서 일치하는 것으로 대체된다.임의의 왼쪽 측면인 일치된 전이 가능한 v가 부작용(예: a[i+]의 형태를 가질 수 없으며 no_side_effects 술어는 다른 DMS 메커니즘과 함께 구축된 분석기에 의해 정의됨)을 적용하기 위해 충족해야 하는 추가 조건을 제공하는 조건절.

코드에서 복잡한 변환을 달성하는 것은 원하는 효과를 얻기 위해 협력하는 많은 규칙을 제공함으로써 달성된다.규칙 집합은 PARLANSE에서 코드화된 메타프로그래프에 의해 프로그램의 일부에 초점을 맞춘다.

정의되고 적용되는 언어 정의와 소스 대 소스 변환 규칙의 완전한 예는 고등학교 대수학과 약간의 미적분을 도메인별 언어로 사용하여 보여준다.

참조

  1. ^ DMS: 실용적인 확장 가능한 소프트웨어 진화를 위한 프로그램 변환.소프트웨어 엔지니어링 국제 회의 2004 재인쇄
  2. ^ 설계 유지관리 시스템.ACM 1992년 통신재인쇄
  3. ^ 쉽게 만들어지는 임의 언어에 대한 분기 적용
  4. ^ "Clone Detection Using Abstract Syntax Trees. Proceedings International Conference on Software Maintenance 1998". doi:10.1109/ICSM.1998.738528. S2CID 12834606. Archived from the original on 2012-10-10. Retrieved 2010-11-06. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  5. ^ Akers, Robert L.; Baxter, Ira D.; Mehlich, Michael; Ellis, Brian J.; Luecke, Kenn R. (2007). "Case study: Re-engineering C++ component models via automatic program transformation". Information and Software Technology. 49 (3): 275–291. doi:10.1016/j.infsof.2006.10.012. S2CID 13219993.
  6. ^ 중소기업 혁신 연구(DoE):리팩터++
  7. ^ "Semantic Designs: PARLANSE Parallel Programming Language for Windows Pentium/80x86". www.semanticdesigns.com.

외부 링크