srcML

srcML
srcML
개발자마이클 L. 콜라드 조나단 1세메아틱
기입처C, C++, Java
면허증.GPL
웹 사이트www.srcml.org

srcML(소스 M L)은 소스 코드를 문서 지향 XML로 표현한 것입니다.그것은 마이클 L. 콜라드와 조나단 1세의 공동 노력으로 만들어졌습니다. 메아틱.약어 srcML은 Source Markup Language의 약어입니다.srcML은 소스 코드(텍스트)를 추상 구문 트리 또는 AST(태그)의 정보로 단일 XML 문서로 래핑합니다.srcML 마크업에서 원본 소스 코드 문서를 다시 작성할 수 있도록 모든 원본 텍스트가 보존됩니다.유일한 예외는 새로운 회선의 정규화 [1]가능성입니다.

srcML의 목적은 어휘, 문서, 구조 및 구문 수준에서 소스 코드에 대한 전체 액세스를 제공하는 것입니다.또한 이 형식은 팩트 추출 및 변환을 쉽게 지원합니다.툴킷은 srcML 웹사이트에서 유지되는 srcML 툴킷에서 지원되며 확장 가능하고 가벼운 팩트 추출 및 변환을 수행하는 것으로 나타났습니다.

srcML 툴킷

srcML 툴킷은 srcml이라는 명령줄 프로그램으로 구성되어 있습니다.이 프로그램은 명령줄에 코드파일이 제공되면 소스 코드에서 srcML로 변환되며 명령줄에 srcml 아카이브가 제공되면 srcML에서 소스 코드로 변환됩니다.또한 이 프로그램은 XPath, XSLT 및 REXENG와 같은 도구를 사용하여 srcML 아카이브의 직접 쿼리 및 변환을 지원합니다.srcML 툴킷은 현재 C, C++, C# 및 Java를 지원하고 있습니다.

srcML 형식

srcML 형식은 원본 소스 코드 파일의 모든 텍스트와 XML 태그로 구성됩니다.특히 텍스트는 코드의 구문 구조를 나타내는 srcML 요소로 둘러싸여 있습니다.즉,[2] 이것은 코드의 모든 구문 구조를 명시적으로 식별합니다.

srcML에서 사용되는 태그는 어떤 카테고리에 속하는지와 함께 아래에 나열되어 있습니다.

카테고리 srcML 요소
파일/프로젝트 구성 단위
진술 asm, block, break, case, constraint, continue, continue, decl, extr_stmt, default, else empty_stmt, extern, for, if, if, incr, index, init, label, macro, name, name, name, namro, range, range, require, requires, tempt, tempt, tempt, tempt, tempt, tempt, tempt, t
기능/방법 인수, argument_list, call, function, function_decl, param, parameter_list, return, 지정자
학급 class, class_decl, 컨스트럭터, destructor, destructor_decl, friend, member_list, private, protected, public, super
구조 및 조합 struct, struct_decl, union, union_decl
예외. 캐치, 던지기, 던지기, 트라이
C-프리프로세서 cpp:files, cpp:files, cpp:endif, cpp:error, cpp:file, cpp:iff, cpp:ifdef, cpp:files, cpp:files, cpp:cp:line, cpp:lassma, cpp:undef
K&R C krparam, krparam_list
자바 확장, 마지막으로 구현, Import, 패키지
추가 마크업 점등: 표시, 유형: 수식자, op: 표시
디버깅 마커, 모드, 해석
기타 탈출하다

srcML은 XML 네임스페이스를 사용합니다.각 네임스페이스와 네임스페이스 자체를 나타내기 위해 사용되는 프레픽스 목록을 다음에 나타냅니다.

프리픽스 네임스페이스
src http://www.srcml.org/srcML/src
cpp http://www.srcml.org/srcML/cpp
포스 http://www.srcml.org/srcML/position
불을 켰다. http://www.srcml.org/srcML/literal
에러 http://www.srcml.org/srcML/srcerr

주의: srcML 아카이브의 경우 프로젝트 전체가 단일 루트 단위 요소 내에 포함되며 각 개별 파일은 루트 단위 요소 내에 단위 요소로 포함됩니다.

단일 파일 변환

다음은 단일 파일에서 srcml을 사용하는 방법을 보여 줍니다.

다음 예제에서는 C++ 파일 main.cpp를 srcML 파일 main.cpp.xml로 변환합니다.

srcml main.cpp -o main.cpp.xml

다음 명령어는 main.cpp.xml 파일에서 소스 코드를 추출하여 C++ 파일 main.cpp에 저장합니다.

srcml main.cpp.xml -o main.cpp

프로젝트 전환

다음은 전체 프로젝트에서 src2srcml 및 srcml2src를 사용하는 방법을 보여 줍니다.

다음 예제에서는 프로젝트 'project'를 srcML 파일 project.xml로 변환합니다.

srcml project -o project.xml

다음 명령어는 소스 코드 파일을 project.xml 파일에서 추출하여 디렉토리 프로젝트에 배치합니다.

srcml —to-dir project project.xml

srcML을 사용한 프로그램 변환

srcML을 사용하면 현재 XML API와 툴을 모두 사용할 수는 없지만 대부분 사용할 수 있습니다.또한 xslt={name} 인수를 사용하여 XSLT를 직접 사용할 수도 있습니다.srcml2src 명령어로 xls를 지정합니다.XSLT에서 srcML 마크업을 사용하면 XML과 같은 구조(srcML)에 Program Transformations를 적용하여 변환된 xml을 얻을 수 있습니다.xml은 srcml2src 도구를 사용하여 소스 코드 표현을 다시 쓸 수 있습니다.프로그램 변환에 대한 srcML의 적용은 Collard [1]등에 의해 자세히 설명된다.

다음 명령은 XSLT 프로그램 프로그램을 실행합니다.xsl, srcML 아카이브 프로젝트.xml의 경우

srcml —xslt program.xsl project.xml

srcML을 사용한 팩트 추출

가장 간단한 형태로, srcML을 사용한 팩트 추출은 XPath를 활용하여 srcML 문서의 일부를 처리하고 소스 코드의 다양한 엔티티 또는 특성에 대한 정보를 가져옵니다.물론 이것에만 국한된 것은 아니다.모든 표준 XML API를 사용할 수 있습니다.팩트 추출에 대한 srcML의 적용은 Kagdi 등에 의해 자세히 설명된다.[3]

cpp:directive, cpp:file, cpp:include, cpp:define, cpp:undef, cpp:iff, cpp:else, cpp:elif, cpp:endif, cpp:thern, cpp:pragma, cpp:errorliter, srifier, sraperator의 예

다음 명령어는 srcML 아카이브 project.xml에서 XPath 경로를 실행합니다.

srcml —xpath "xpath" project.xml

편리한 확장 기능을 제공하는 작업이 진행 중입니다.

srcML을 사용한 소스 코드 차이 분석

srcML은 소스 코드에 대한 차이 분석을 수행하는 데 많은 이점을 제공합니다.이러한 장점 중 하나는 코드베이스의 특정 섹션 간 및 동일한 코드베이스 버전 간에 차이를 쿼리할 수 있다는 것입니다.차이 분석을 위한 srcML의 적용은 Maletic 등에 의해 자세히 설명된다.[4]

srcML 사용 방법의 예로서 소스 문서에서 모든 클래스를 검색하기 위해 사용할 수 있는XPath 식을 다음에 나타냅니다.

//src: 클래스

다른 예로는 함수 내의 모든 코멘트를 찾을 수 있습니다.

/src: function//src: 개요

srcML은 xml을 기반으로 하기 때문에 모든 XML 도구를 srcML과 함께 사용할 수 있어 풍부한 기능을 제공합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b Collard, M.L., Decker, M., Maletic, J. I. (2011). Lightweight Transformation and Fact Extraction with the srcML Toolkit. Proceedings of the 11th IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM'11). pp. 10 pages.{{cite book}}: CS1 maint: 여러 이름: 작성자 목록(링크)
  2. ^ Collard, M.L, Maletic, J. I., Robinson, B.P. (2010). A Lightweight Transformational Approach to Support Large Scale Adaptive Changes. Proceedings of the IEEE 26th IEEE International Conference on Software Maintenance (ICSM'10). pp. 10 pages.{{cite book}}: CS1 maint: 여러 이름: 작성자 목록(링크)
  3. ^ Collard, Michael L., Kagdi, Huzefa, Maletic, Jonathan I. (2003). An XML-Based Lightweight C++ Fact Extractor. Proceedings of the 11th IEEE International Workshop on Program Comprehension (IWPC'03). pp. 10 pages.{{cite book}}: CS1 maint: 여러 이름: 작성자 목록(링크)
  4. ^ Maletic, Jonathan I., Collard, Michael L. (2004). Supporting Source Code Difference Analysis. Proceedings of the IEEE International Conference on Software Maintenance (ICSM'04). pp. 10 pages.{{cite book}}: CS1 maint: 여러 이름: 작성자 목록(링크)
  • Maletic, Jonathan I., Collard, Michael L., Kagdi, Huzefa (2004). Leveraging XML Technologies in Developing Program Analysis Tools. Proceedings of the 4th International Workshop on Adoption-Centric Software Engineering (ACSE'04). pp. 6 pages.{{cite book}}: CS1 maint: 여러 이름: 작성자 목록(링크)
  • Collard, Michael L., Maletic, Jonathan I., Marcus, Andrian (2002). Supporting Document and Data Views of Source Code. Proceedings of the 2nd ACM Symposium on Document Engineering (DocEng'02). pp. 8 pages.{{cite book}}: CS1 maint: 여러 이름: 작성자 목록(링크)
  • Maletic, Jonathan I., Collard, Michael L., Marcus, Andrian (2002). Source Code Files as Structured Documents. Proceedings of the 10th IEEE International Workshop on Program Comprehension (IWPC'02). pp. 4 pages.{{cite book}}: CS1 maint: 여러 이름: 작성자 목록(링크)

외부 링크