<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v3.0 20080202//EN" "http://dtd.nlm.nih.gov/publishing/3.0/journalpublishing3.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="3.0" xml:lang="en" article-type="research article">
 <front>
  <journal-meta>
   <journal-id journal-id-type="publisher-id">
    jcc
   </journal-id>
   <journal-title-group>
    <journal-title>
     Journal of Computer and Communications
    </journal-title>
   </journal-title-group>
   <issn pub-type="epub">
    2327-5219
   </issn>
   <issn publication-format="print">
    2327-5227
   </issn>
   <publisher>
    <publisher-name>
     Scientific Research Publishing
    </publisher-name>
   </publisher>
  </journal-meta>
  <article-meta>
   <article-id pub-id-type="doi">
    10.4236/jcc.2025.133007
   </article-id>
   <article-id pub-id-type="publisher-id">
    jcc-141584
   </article-id>
   <article-categories>
    <subj-group subj-group-type="heading">
     <subject>
      Articles
     </subject>
    </subj-group>
    <subj-group subj-group-type="Discipline-v2">
     <subject>
      Computer Science 
     </subject>
     <subject>
       Communications
     </subject>
    </subj-group>
   </article-categories>
   <title-group>
    Reverse Engineering Approach for Analyzing and Transforming Graphical User Interface Source Code into Class Diagrams
   </title-group>
   <contrib-group>
    <contrib contrib-type="author" xlink:type="simple">
     <name name-style="western">
      <surname>
       Herifidy Malalaniaina
      </surname>
      <given-names>
       Andrianaivo
      </given-names>
     </name>
    </contrib>
    <contrib contrib-type="author" xlink:type="simple">
     <name name-style="western">
      <surname>
       William Germain
      </surname>
      <given-names>
       Dimbisoa
      </given-names>
     </name>
    </contrib>
    <contrib contrib-type="author" xlink:type="simple">
     <name name-style="western">
      <surname>
       Thomas
      </surname>
      <given-names>
       Mahatody
      </given-names>
     </name>
    </contrib>
   </contrib-group> 
   <aff id="affnull">
    <addr-line>
     aSchool of Computer Science, University of Fianarantsoa, Fianarantsoa, Madagascar
    </addr-line> 
   </aff> 
   <pub-date pub-type="epub">
    <day>
     05
    </day> 
    <month>
     03
    </month>
    <year>
     2025
    </year>
   </pub-date> 
   <volume>
    13
   </volume> 
   <issue>
    03
   </issue>
   <fpage>
    86
   </fpage>
   <lpage>
    102
   </lpage>
   <history>
    <date date-type="received">
     <day>
      30,
     </day>
     <month>
      January
     </month>
     <year>
      2025
     </year>
    </date>
    <date date-type="published">
     <day>
      23,
     </day>
     <month>
      January
     </month>
     <year>
      2025
     </year> 
    </date> 
    <date date-type="accepted">
     <day>
      23,
     </day>
     <month>
      March
     </month>
     <year>
      2025
     </year> 
    </date>
   </history>
   <permissions>
    <copyright-statement>
     © Copyright 2014 by authors and Scientific Research Publishing Inc. 
    </copyright-statement>
    <copyright-year>
     2014
    </copyright-year>
    <license>
     <license-p>
      This work is licensed under the Creative Commons Attribution International License (CC BY). http://creativecommons.org/licenses/by/4.0/
     </license-p>
    </license>
   </permissions>
   <abstract>
    In the field of software engineering, the design phase occupies a pivotal position, serving as a critical juncture in ensuring the quality, maintainability, and efficiency of software systems. The creation of software typically begins with the design phase, which is then succeeded by the production phase. In this context, model-driven engineering (MDE) represents a robust methodology for enhancing the development of complex systems by situating models at the core of the process. This method is concerned with the creation and transformation of models, progressing from abstract to concrete representations. To illustrate, in the context of MDE, models can be transformed from the Unified Modelling Language (UML) to a graphical interface. In contrast, reverse engineering such as MDE-based reverse engineering is a process that aims to understand, analyse and reconstruct design artifacts from an existing system. This approach involves transforming concrete models into abstract models. This paper proposes an innovative approach to reverse engineering based on software design using the graphical user interface model. More specifically, this project involves the transformation of a WIMP (Window, Icon, Menu and Pointer) graphical user interface into a class diagram. To do this, we will use a syntactic analysis method of the source code based on the Java language and regular expressions, and the Atlas Transformation Language (ATL) will be used to transform the graphical interface into a class diagram.
   </abstract>
   <kwd-group> 
    <kwd>
     MDE
    </kwd> 
    <kwd>
      Reverse Engineering
    </kwd> 
    <kwd>
      Source Code Parsing
    </kwd> 
    <kwd>
      Regex
    </kwd> 
    <kwd>
      ATL
    </kwd> 
    <kwd>
      Class Diagrams
    </kwd>
   </kwd-group>
  </article-meta>
 </front>
 <body>
  <sec id="s1">
   <title>1. Introduction</title>
   <p>Design is a crucial phase in software engineering. It precisely defines the detailed requirements, the functionalities to be implemented and the concepts of the software to be created. It allows potential problems to be identified and resolved early in the project, ensures the consistency and quality of the final product, and optimises resources and lead times.</p>
   <p>From this perspective, MDE is emerging as a powerful approach to strengthen these aspects by placing models at the centre of the development process. MDE focuses on the creation and transformation of models, facilitating the transition from abstract to concrete representations, and thus from design to implementation. For example, this approach allows models derived from the UML to be transformed into functional graphical interfaces, illustrating the potential of MDE to improve the quality and efficiency of the development of complex systems.</p>
   <p>Many researches in MDE focus on the generation of HCI from autonomous models <xref ref-type="bibr" rid="scirp.141584-1">
     [1]
    </xref>-<xref ref-type="bibr" rid="scirp.141584-3">
     [3]
    </xref>. The creation of HCI is therefore an essential stage in the development of modern software, as it determines the way in which users interact with computers. Currently, it is common to come across software projects where existing systems lack adequate documentation or present absolute interfaces. So, in the face of rapidly evolving technologies and user requirements, it is essential to redesign, update or reuse HCI.</p>
   <p>Reverse engineering <xref ref-type="bibr" rid="scirp.141584-4">
     [4]
    </xref> is a method of analyzing an existing product or system to understand its structure, operation and behaviour. The process involves breaking down the product into its fundamental components and creating an abstract representation or documentation of the system based on this analysis. Reverse engineering can be used to modernize interfaces by transforming HCI models into class diagrams. Transforming an HCI <xref ref-type="bibr" rid="scirp.141584-5">
     [5]
    </xref> model into a class diagram is a crucial step, as the class diagram is a fundamental component of the UML. It plays an important role in software engineering for the design and documentation of software systems. In addition, in object-oriented programming, the dominant trend in software development, the class diagram helps to organize code into classes and objects. By visualizing classes and their relationships, developers can design systems that are more modular, reusable and easy to maintain.</p>
   <p>Furthermore, transforming the graphic user interface (GUI) into a class diagram poses significant challenges in reverse engineering, as these two models are not compatible. Obtaining a class diagram, including the types of relationships between classes and multiplicities, from the GUI requires clear methods.</p>
   <p>Given the incompatibility between the graphical interface model and the UML model <xref ref-type="bibr" rid="scirp.141584-6">
     [6]
    </xref>, this research aims to create a methodical approach for reverse engineering graphical interfaces of the window, icon, menu and pointer types into UML diagrams. The aim of this research is to analyze the source code of graphical interfaces, examining elements such as buttons, panels, window names and events. This analysis will make it possible to transform the results obtained into a UML model, thus facilitating the conversion of the graphical interfaces into coherent and usable UML representations.</p>
   <p>For this project, we will use the reverse engineering method. First, we will proceed the parsing of the GUI source code to extract the various elements needed to create the class diagram. This includes class names, attributes, methods, relationships between classes and multiplicities, among others. This analysis will be carried out using regular expressions to accurately identify and extract these elements. Secondly, we will transform the results of this syntactic analysis into an instance of the Ecore metamodel using the Java language. Finally, we will transform the graphical interface into a class diagram using ATL <xref ref-type="bibr" rid="scirp.141584-7">
     [7]
    </xref>.</p>
  </sec><sec id="s2">
   <title>2. Methodologies</title>
   <p>This section presents a review of previous research in the area of reverse engineering, parsing and transforming GUI source code into UML class diagrams. It discusses existing methods and situates the present work in relation to this existing body of knowledge.</p>
   <sec id="s2_1">
    <title>2.1. Reverse Engineering</title>
    <p>Reverse engineering is a methodology frequently employed in model-driven engineering projects. <xref ref-type="bibr" rid="scirp.141584-8">
      [8]
     </xref> presented an illustrative example of reverse engineering, which was employed with the objective of facilitating the development and maintenance of software comprising substantial user interface source code. The GUISURFER tool <xref ref-type="bibr" rid="scirp.141584-8">
      [8]
     </xref> <xref ref-type="bibr" rid="scirp.141584-9">
      [9]
     </xref>, a reverse engineering tool that automatically extracts behavioural models from GUI source code, was employed in this instance. The tool is also capable of automating certain tasks associated with the analysis of these models; however, it is unable to generate a class diagram from the GUI.</p>
    <p>
     <xref ref-type="bibr" rid="scirp.141584-10">
      [10]
     </xref> employs a model-based architectural approach to facilitate comprehension of complex software systems throughout their evolution and maintenance. In accordance with <xref ref-type="bibr" rid="scirp.141584-10">
      [10]
     </xref> methodology, the conversion of GUI source code into a diagram is feasible; however, the requisite tool for transforming source code into a UML model is currently unavailable.</p>
    <p>In their study, <xref ref-type="bibr" rid="scirp.141584-11">
      [11]
     </xref> employed reverse engineering to construct a class diagram from the graphical user interface, which was represented in the form of a screen capture. In this study, optical character recognition (OCR) <xref ref-type="bibr" rid="scirp.141584-12">
      [12]
     </xref> and Petri nets were employed to transform the graphical interface into a class diagram. This approach results in the generation of a class diagram; however, it lacks the requisite details pertaining to the recovery of the types of relationship between classes and stereotypes.</p>
    <p>In this study, we put forth a novel methodology for parsing with regular expressions and transforming GUI source code into UML class diagrams. The method is distinguished by its flexibility and efficiency in source code transformation.</p>
   </sec>
   <sec id="s2_2">
    <title>2.2. Parsing Analysis</title>
    <p>Parsing analysis represents a fundamental stage in the processing and execution of programs. It is employed to ascertain whether the source code adheres to the grammatical conventions of the programming language and to transform this code into an organised data structure for subsequent processing stages. The utilisation of decomposition and composition methodologies, in conjunction with tools such as Yacc <xref ref-type="bibr" rid="scirp.141584-13">
      [13]
     </xref>, Bison <xref ref-type="bibr" rid="scirp.141584-14">
      [14]
     </xref> and ANTLR <xref ref-type="bibr" rid="scirp.141584-15">
      [15]
     </xref>, facilitates the development of robust and high-performance parsers for an array of programming languages.</p>
    <p>Parsing is the process of identifying the structure of a text, which is often a sentence in a natural language. It is also used for computer programs. In the context of computer science, parsing involves the examination of the contents of a text or file in order to ascertain its syntax or to identify the requisite elements. In the context of source code, <xref ref-type="bibr" rid="scirp.141584-16">
      [16]
     </xref> employed source code analysis and transformation techniques, with a particular emphasis on tools for the description, analysis and transformation of source code. This approach is concerned with the transformation of source code, employing techniques of syntactic analysis and code rewriting. However, it does not address the specific issue of transforming source code into UML class diagrams.</p>
   </sec>
   <sec id="s2_3">
    <title>2.3. Regular Expressions</title>
    <p>Regex are powerful tools that are used to identify and manipulate text patterns in character strings. Despite their occasionally intricate structure, regular expressions facilitate the formulation of precise and efficient text queries. They are a crucial tool in modern word processing and programming languages, including the retrieval of social media data using the Social Media Developers API and Regex <xref ref-type="bibr" rid="scirp.141584-17">
      [17]
     </xref>.</p>
    <p>
     <xref ref-type="table" rid="table1">
      Table 1
     </xref>provides an illustration of the process of recovering a line of code in Java using regular expressions. In this example, a regular expression was employed to identify and extract the declarations of graphical components, including JButton, JTextField, JFrame, and JLabel. This approach automates the analysis of the source code, thereby facilitating the transformation of graphical elements into UML representations. Furthermore, the utilisation of regular expressions is highly advantageous for the processing of extensive code volumes, circumventing the potential inaccuracies inherent to manual analysis.</p>
    <table-wrap id="table1">
     <label>
      <xref ref-type="table" rid="table1">
       Table 1
      </xref></label>
     <caption>
      <title>
       <xref ref-type="bibr" rid="scirp.141584-"></xref>Table 1. Example of Regex-based code line retrieval in Java Swing.</title>
     </caption>
     <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
      <tr> 
       <td class="custom-bottom-td acenter" width="17.46%"><p style="text-align:center">Graphics Component</p></td> 
       <td class="custom-bottom-td acenter" width="36.98%"><p style="text-align:center">Line of code to be analyzed</p></td> 
       <td class="custom-bottom-td acenter" width="45.56%"><p style="text-align:center">Regular expressions</p></td> 
      </tr> 
      <tr> 
       <td class="custom-top-td acenter" width="17.46%"><p style="text-align:center">Boutons (Jbutton)</p></td> 
       <td class="custom-top-td acenter" width="36.98%"><p style="text-align:center">JButton myButton = new JButton("Click");</p></td> 
       <td class="custom-top-td acenter" width="45.56%"><p style="text-align:center">JButtons+(w+)s*=s*news+JButtons*((.*?))s*;</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="17.46%"><p style="text-align:center">Field (Jlabel)</p></td> 
       <td class="acenter" width="36.98%"><p style="text-align:center">JLabel myLabel = new JLabel("name: ");</p></td> 
       <td class="acenter" width="45.56%"><p style="text-align:center">JLabels+(w+)s*=s*news+JLabels*((.*?))s*;</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="17.46%"><p style="text-align:center">Text field (JtextField)</p></td> 
       <td class="acenter" width="36.98%"><p style="text-align:center">JTextField myTextField = new JTextField(20);</p></td> 
       <td class="acenter" width="45.56%"><p style="text-align:center">JTextFields+(w+)s*=s*news+JTextFields*((.*?))s*;</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="17.46%"><p style="text-align:center">Window (Jframe)</p></td> 
       <td class="acenter" width="36.98%"><p style="text-align:center">JFrame frame = new JFrame("Customer")</p></td> 
       <td class="acenter" width="45.56%"><p style="text-align:center">JFrames+(w+)s*=s*news+JFrames*((.*?))s*;</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="17.46%"><p style="text-align:center">Class name (public class)</p></td> 
       <td class="acenter" width="36.98%"><p style="text-align:center">public class Example</p></td> 
       <td class="acenter" width="45.56%"><p style="text-align:center">publics+classs+(w+)s*{?</p></td> 
      </tr> 
     </table>
    </table-wrap>
    <p>
     <xref ref-type="table" rid="table2">
      Table 2
     </xref> presents an example of a regular expression used in the analysis of web page source code, illustrating its capability to extract specific information beyond graphical components.</p>
    <table-wrap id="table2">
     <label>
      <xref ref-type="table" rid="table2">
       Table 2
      </xref></label>
     <caption>
      <title>
       <xref ref-type="bibr" rid="scirp.141584-"></xref>Table 2. Example of extracting web code lines using Regex.</title>
     </caption>
     <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
      <tr> 
       <td class="custom-bottom-td acenter" width="17.76%"><p style="text-align:center">Component/or test</p></td> 
       <td class="custom-bottom-td acenter" width="44.82%"><p style="text-align:center">Line of code to be analyzed</p></td> 
       <td class="custom-bottom-td acenter" width="37.42%"><p style="text-align:center">Regular expressions</p></td> 
      </tr> 
      <tr> 
       <td class="custom-top-td acenter" width="17.76%"><p style="text-align:center">Page Title</p></td> 
       <td class="custom-top-td acenter" width="44.82%"><p style="text-align:center"> &lt; title &gt; MyTitle &lt; /title &gt; </p></td> 
       <td class="custom-top-td acenter" width="37.42%"><p style="text-align:center"> &lt; title &gt; (.*?) &lt; /title &gt; </p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="17.76%"><p style="text-align:center">button</p></td> 
       <td class="acenter" width="44.82%"><p style="text-align:center"> &lt; button type="submit" &gt; Register &lt; /button &gt; </p></td> 
       <td class="acenter" width="37.42%"><p style="text-align:center"> &lt; button(?:s+[^ &gt; ]*)? &gt; (.*?) &lt; /button &gt; </p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="17.76%"><p style="text-align:center">label</p></td> 
       <td class="acenter" width="44.82%"><p style="text-align:center"> &lt; label for="email" &gt; Email: &lt; /label &gt; </p></td> 
       <td class="acenter" width="37.42%"><p style="text-align:center"> &lt; label for=" (.*?)" &gt; (.*?) &lt; /label &gt; </p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="17.76%"><p style="text-align:center">Testing the presence of a price (in $ or €)</p></td> 
       <td class="acenter" width="44.82%"><p style="text-align:center"> &lt; p &gt; Price: $19.99 &lt; /p &gt; </p></td> 
       <td class="acenter" width="37.42%"><p style="text-align:center">[$€]d+(.d+)?</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="17.76%"><p style="text-align:center">To test for the existence of an email address</p></td> 
       <td class="acenter" width="44.82%"><p style="text-align:center">Exemple33@gmail.com</p></td> 
       <td class="acenter" width="37.42%"><p style="text-align:center">[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="17.76%"><p style="text-align:center">To test for the presence of the word “name”</p></td> 
       <td class="acenter" width="44.82%"><p style="text-align:center"> &lt; h2 Id="name_product" &gt; Status in Malagasy Art &lt; /h2 &gt; </p></td> 
       <td class="acenter" width="37.42%"><p style="text-align:center">&lt;*="name</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="17.76%"><p style="text-align:center">Redirection managed by HTML</p></td> 
       <td class="acenter" width="44.82%"><p style="text-align:center"> &lt; a href="shop.html" id="registerButton" &gt; Register &lt; /a &gt; </p></td> 
       <td class="acenter" width="37.42%"><p style="text-align:center">href=" ([^"]*) "</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="17.76%"><p style="text-align:center">Redirection managed by JavaScript</p></td> 
       <td class="acenter" width="44.82%"><p style="text-align:center">docu ment.getElementById('registerButton').onclick = function() { window.location.href = 'shop.html'; };</p></td> 
       <td class="acenter" width="37.42%"><p style="text-align:center">window.location.hrefs*=s*'([^']*)' or</p><p style="text-align:center">window.locations*=s*'([^']*)'</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="17.76%"><p style="text-align:center">To test for the presence of an image</p></td> 
       <td class="acenter" width="44.82%"><p style="text-align:center"> &lt; img src="mintour-banque-dimage-photo-336.jpg" alt="Product" &gt; </p></td> 
       <td class="acenter" width="37.42%"><p style="text-align:center"> &lt; imgs*[^ &gt; ]*srcs*=s*['"][^'"]+.(jpg|jpeg|png|gif)['"][^ &gt; ]* &gt; </p></td> 
      </tr> 
     </table>
    </table-wrap>
   </sec>
   <sec id="s2_4">
    <title>2.4. Transformation of Source Code into a Class Diagram</title>
    <p>The conversion of source code into a class diagram represents a fundamental aspect of systems design, particularly in the context of object-oriented systems. They play a pivotal role at various stages of software development, offering a visual representation of data structures and relationships between disparate classes within a system. The automatic transformation of source code into class diagrams facilitates a more comprehensive understanding, documentation and maintenance of software systems. This paper presents an overview of existing approaches to the automatic transformation of source code into class diagrams, an examination of the tools that are currently available for this purpose, and a discussion of the challenges that have been encountered. It then proposes a new method that is based on syntactic analysis and regular expressions.</p>
    <table-wrap id="table3">
     <label>
      <xref ref-type="table" rid="table3">
       Table 3
      </xref></label>
     <caption>
      <title>
       <xref ref-type="bibr" rid="scirp.141584-"></xref>Table 3. Existing and proposed approaches.</title>
     </caption>
     <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
      <tr> 
       <td class="custom-bottom-td acenter" width="31.04%"><p style="text-align:center">Methodology</p></td> 
       <td class="custom-bottom-td acenter" width="25.86%"><p style="text-align:center">Transformation tool</p></td> 
       <td class="custom-bottom-td acenter" width="43.10%"><p style="text-align:center">Graphical interface to class diagram</p></td> 
      </tr> 
      <tr> 
       <td class="custom-top-td acenter" width="31.04%"><p style="text-align:center">Approach of Saraiva et al., (2012) <xref ref-type="bibr" rid="scirp.141584-8">
          [8]
         </xref></p></td> 
       <td class="custom-top-td acenter" width="25.86%"><p style="text-align:center">GUISURFER</p></td> 
       <td class="custom-top-td acenter" width="43.10%"><p style="text-align:center">does not transform</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="31.04%"><p style="text-align:center">Approach of Favre, (2012) <xref ref-type="bibr" rid="scirp.141584-10">
          [10]
         </xref></p></td> 
       <td class="acenter" width="25.86%"><p style="text-align:center">NEREUS</p></td> 
       <td class="acenter" width="43.10%"><p style="text-align:center">only a theoretical approach, not a transformation</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="31.04%"><p style="text-align:center">Approach of Muhairat et al., (2011) <xref ref-type="bibr" rid="scirp.141584-11">
          [11]
         </xref></p></td> 
       <td class="acenter" width="25.86%"><p style="text-align:center">OCR, Petri nets</p></td> 
       <td class="acenter" width="43.10%"><p style="text-align:center">contains the transformation, but the class diagram still needs to be completed</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="31.04%"><p style="text-align:center">Proposed approach</p></td> 
       <td class="acenter" width="25.86%"><p style="text-align:center">Regex, Java and ATL</p></td> 
       <td class="acenter" width="43.10%"><p style="text-align:center">Transformation of the graphical interface into a class diagram</p></td> 
      </tr> 
     </table>
    </table-wrap>
    <p>
     <xref ref-type="table" rid="table3">
      Table 3
     </xref> illustrates the extant approaches, together with the tools used for model transformation. The approach proposed by Saraiva et al., (2012) <xref ref-type="bibr" rid="scirp.141584-8">
      [8]
     </xref> does not include the transformation of the graphical interface into a class diagram. The approach proposed by Favre (2012) <xref ref-type="bibr" rid="scirp.141584-10">
      [10]
     </xref> presents a theoretical framework but lacks a detailed explanation of the transformation process. Similarly, the approach put forth by Muhairat et al. (2011) <xref ref-type="bibr" rid="scirp.141584-11">
      [11]
     </xref> outlines the transformation but lacks a comprehensive methodology for identifying the types of relationships between classes and the associated stereotypes.</p>
    <p>In order to achieve this, we put forward a syntactic analysis approach for source code, based on regular expressions, and a Java transformer to transform the analysis result into a UML class diagram. <xref ref-type="fig" rid="fig1">
      Figure 1
     </xref> presents an overview of the methodology employed in this research project.</p>
    <fig id="fig1" position="float">
     <label>Figure 1</label>
     <caption>
      <title>Figure 1. Overview of the proposed approach.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/1733070-rId14.jpeg?20250326033147" />
    </fig>
    <p>Step 1: Parsing source code with regex,</p>
    <p>Step 2: creation of the Ecore metamodel instance,</p>
    <p>Step 3: ATL transformation,</p>
    <p>MM: Metamodel, ATL: Atlas Transformation Language, UML: Unified Modeling Language.</p>
    <p>
     <xref ref-type="fig" rid="fig1">
      Figure 1
     </xref> illustrates the methodology employed in this study. Initially, the syntax of the GUI source code is analyzed using regular expressions, a process conducted in Java. Subsequently, an instance of the Ecore metamodel is created in Java. Finally, the instance of the Ecore metamodel is transformed into a UML class diagram utilising ATL.</p>
    <p>
     <xref ref-type="fig" rid="fig2">
      Figure 2
     </xref> provides a more detailed explanation of the stages involved in the approach.</p>
    <p>The three stages, as illustrated in <xref ref-type="fig" rid="fig2">
      Figure 2
     </xref> will be discussed in greater detail below.</p>
    <p>First step: The initial stage of the process is to parse the source code of the GUI using regex. In this phase, specific information from the GUI source code is extracted, including button names and window titles, through the use of regular expressions.</p>
    <p>In the context of our project, regex functionality is employed for the purpose of identifying and subsequently retrieving the requisite information within the given line of code. In order to detect the button, the following Java code with regular expressions is employed: String buttonRegex = "bJButtonbs*w*s*= w*s*= w*s*= s*JButtons*(";.</p>
    <fig id="fig2" position="float">
     <label>Figure 2</label>
     <caption>
      <title>Figure 2. Three steps in the current approach.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/1733070-rId15.jpeg?20250326033147" />
    </fig>
    <p>Once we have extracted the line of code containing, for example, the declaration of a button, we can use the split() method to extract the useful information. Look at the following line of code: “JButton btn_Purchase = new JButton(“Purchase”);”. To extract only the name of the “Purchase” button, we can use the split() method.</p>
    <p>By employing the split function with the double quote character as the separator, specifically String[] parts = line.split("""), an array is generated in which the elements between the quotes are isolated. Consequently, to retrieve the string between the quotes, the expression String buttonLabel = parts <xref ref-type="bibr" rid="scirp.141584-1">
      [1]
     </xref>; is utilized. Finally, the retrieved value can be displayed with the System.out.println(“Button:” + buttonLabel.trim()) statement.</p>
    <p>Second step: The second step is the creation of the Ecore metamodel instance. This stage involves the generation of instances of the Ecore metamodel based on the outcomes of the syntactic analysis conducted in the preceding stage. The final product will be a XML Metadata Interchange (XMI) file, in the .xmi format.</p>
    <p>Third step: the third step is as follows, the graphical interface is transformed into a class diagram using the ATL transformation language.</p>
    <p>ATL is a rule-based model transformation language <xref ref-type="bibr" rid="scirp.141584-7">
      [7]
     </xref> developed within the context of the Eclipse Modeling Framework (EMF) initiative. ATL enables the specification of transformations between models written in metamodels compliant with the Meta Object (MOF) Facility standard.</p>
    <p>As part of this research, we use ATL to transform the result of the previous step, in particular the Gui_file.xmi file, into a class diagram. In fact, the Gui_file.xmi file obtained in the previous step is a metamodel that corresponds to the graphical interface model to be transformed. The transformation is then performed using this file as the source model.</p>
    <p>The transformation of the graphical interface into a class diagram using ATL is shown in <xref ref-type="fig" rid="fig3">
      Figure 3
     </xref>.</p>
    <fig id="fig3" position="float">
     <label>Figure 3</label>
     <caption>
      <title>Figure 3. Transformation of the graphical interface into a class diagram using ATL. MM: Metamodel, ATL: Atlas Transformation Language, UML: Unified Modeling Language, GUI: Graphical User Interface.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/1733070-rId16.jpeg?20250326033147" />
    </fig>
    <p>
     <xref ref-type="fig" rid="fig3">
      Figure 3
     </xref> illustrates that the source model aligns with the source metamodel, as represented by the Gui_file.xmi file. This modeling is based on the Ecore metamodel, which serves as the foundation for modeling within EMF.</p>
   </sec>
   <sec id="s2_5">
    <title>2.5. Transformation Rules</title>
    <p>Transformation rules are directives or criteria that are employed in order to facilitate the conversion of one model into another. In the context of ATL, transformation rules <xref ref-type="bibr" rid="scirp.141584-18">
      [18]
     </xref> are defined with the objective of establishing a consistent and precise association between the structures and properties of source models and those of target models. In this project, the transformation rule is typically applied during the parsing of the source code. ATL merely transforms the retrieved information into a UML class diagram.</p>
    <p>In the case of this work, the source metamodel, Gui_file.xmi, contains parsing results obtained using regular expressions. The transformation rules comprise the recovery of elements from the source metamodel with a view to converting them into a class diagram.</p>
    <p>The establishment of transformation rules is of paramount importance in the conversion of source models into target models that align with the requisite metamodels. In the process of transforming GUI source code into UML class diagrams, these rules serve to determine the manner in which elements extracted from the source code are represented in the UML diagram. In this context, the source model is the GUI source code, and the target model is the UML class diagram. The following section will provide a detailed overview of the transformation rules.</p>
    <p>Rule 1: The names of the classes present on the graphical interfaces will be converted into class names on the product class diagram.</p>
    <p>Rule 2: The textual content displayed on the JLabel of the graphical interfaces will be converted into class attributes on the product class diagram.</p>
    <p>Rule 3: It is not possible to ascertain the attribute type either by examining the graphical interface or by parsing the source code. As a result, the attributes of the generated classes are defined in a systematic manner as follows:</p>
    <p>• The Identifier (Id) and Quantity attributes will be of the integer data type.</p>
    <p>• The Price attribute will be of the floating-point data type.</p>
    <p>• All other attributes will be of the string data type.</p>
    <p>Rule 4: The text on the buttons will be transformed into class methods on the product class diagram.</p>
    <p>Rule 5: The relationships between classes in UML can be described as follows.</p>
    <p>• Association: When one class contains a list of objects from another class, this indicates an association relationship. This means that instances of the first class have a reference to one or more instances of the second class.</p>
    <p>• Aggregation: When a class contains a collection of objects from another class without managing their lifecycle, this relationship is called aggregation. In other words, the aggregated objects can exist independently of the aggregator object.</p>
    <p>• Inheritance: When the “extends” keyword is used to define a class in terms of another class, this indicates an inheritance relationship. This means that the derived class inherits the attributes and methods of the base class.</p>
    <p>Rule 6: If an “Add” button is present in the source code, as in the following example “JButton btnNewButton = new JButton(“Add”);”, this generally indicates that the interface allows multiple items to be added to a collection or list within the class. Consequently, the multiplicity of these elements in the class can be inferred by “0…*”. The line of code containing the button can be easily analyzed using regex. In addition, if a class contains a list (or other collection) from another class, this also indicates a multiplicity of “0…*” for the elements in that list. If neither of these conditions is met, the default multiplicity is 1.</p>
   </sec>
   <sec id="s2_6">
    <title>2.6. Tools and Technologies</title>
    <p>The main tools used to transform graphical interfaces into UML class diagrams are Java, Regular expressions and ATL.</p>
    <p>Java is a high-level, object-oriented programming language that is widely used for the construction of applications. In this case study, the graphical interfaces utilized are Java Swing interfaces created with WindowsBuilder, an Eclipse plugin dedicated to the design of graphical interfaces. Java is employed to author the application source code, perform syntactic analysis of the GUI code and generate the Ecore metamodel instance.</p>
    <p>A regular expression is defined as a sequence of characters that define a search pattern. They are employed extensively for the purposes of string matching and manipulation. In this context, regex is employed for the parsing of source code within graphical user interfaces, with the objective of extracting pertinent information such as class names, attributes, operations, relations and multiplicities.</p>
    <p>ATL is a model transformation language and tool developed by the Eclipse Foundation. It permits the delineation and implementation of transformations between disparate models. In the present study, the objective is to transform the results of the syntactic analysis of the source code of graphical interfaces into UML class diagrams.</p>
    <p>In addition to the aforementioned principal tools, we also employ the EMF <xref ref-type="bibr" rid="scirp.141584-19">
      [19]
     </xref> <xref ref-type="bibr" rid="scirp.141584-20">
      [20]
     </xref>, the Eclipse Integrated Development Environment (IDE), and the Papyrus plugin for the purpose of visualizing the class diagrams that are produced.</p>
   </sec>
  </sec><sec id="s3">
   <title>3. Results</title>
   <p>This study demonstrates the feasibility and efficacy of employing a combination of Java, regular expressions, and ATL to transform graphical user interfaces into class diagrams. This methodology contributes to the advancement of software systems engineering by providing a UML representation of graphical interfaces, which facilitates comprehension and maintenance of systems.</p>
   <p>The transformation of the GUI source code into a class diagram is performed in three main steps: first, syntactic analysis of the GUI source code is performed using regular expressions; second, an instance of the Ecore metamodel is created; third, the transformation of the GUI into a class diagram is performed using ATL.</p>
   <p>Syntactic analysis of the GUI source code is used to extract the elements required to construct the class diagram, which is shown in <xref ref-type="table" rid="table4">
     Table 4
    </xref>.</p>
   <table-wrap id="table4">
    <label>
     <xref ref-type="table" rid="table4">
      Table 4
     </xref></label>
    <caption>
     <title>
      <xref ref-type="bibr" rid="scirp.141584-"></xref>Table 4. Correspondence between graphical interface and class diagrams.</title>
    </caption>
    <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
     <tr> 
      <td class="custom-bottom-td acenter" width="66.82%"><p style="text-align:center">Graphical interface components</p></td> 
      <td class="acenter" width="33.18%"><p style="text-align:center">Class diagram elements</p></td> 
     </tr> 
     <tr> 
      <td class="custom-top-td acenter" width="66.82%"><p style="text-align:center">Class name or window title</p></td> 
      <td class="custom-top-td acenter" width="33.18%"><p style="text-align:center">Class name</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="66.82%"><p style="text-align:center">Text on labels</p></td> 
      <td class="acenter" width="33.18%"><p style="text-align:center">Attributes</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="66.82%"><p style="text-align:center">Button names</p></td> 
      <td class="acenter" width="33.18%"><p style="text-align:center">Methods</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="66.82%"><p style="text-align:center">Correspondences between classes and between attributes</p></td> 
      <td class="acenter" width="33.18%"><p style="text-align:center">Relations</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="66.82%"><p style="text-align:center">According to the transformation rules, existence of the “add” button</p></td> 
      <td class="acenter" width="33.18%"><p style="text-align:center">Multiplicity</p></td> 
     </tr> 
    </table>
   </table-wrap>
   <p>
    <xref ref-type="table" rid="table4">
     Table 4
    </xref>shows the correspondence between the graphical interface and the class diagram. The use of regular expressions to analyze the syntax of the source code proves effective in recovering the elements needed to construct the class diagram.</p>
   <sec id="s3_1">
    <title>3.1. Analysis and Transformation of Java Source Code into UML Class Diagrams</title>
    <p>This case study examines the process of transforming a graphical user interface (GUI) into a class diagram. The GUIs used are simple forms created by WindowsBuilder, which are described in greater detail in <xref ref-type="fig" rid="fig4">
      Figure 4
     </xref>.</p>
    <p>The graphical interfaces in <xref ref-type="fig" rid="fig4">
      Figure 4
     </xref> include three forms relating to suppliers, customers and products.</p>
    <fig id="fig4" position="float">
     <label>Figure 4</label>
     <caption>
      <title>Figure 4. GUI to be analyzed.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/1733070-rId17.jpeg?20250326033151" />
    </fig>
    <p>
     <xref ref-type="fig" rid="fig5">
      Figure 5
     </xref> illustrates the Java code employed for parsing the source code of the Customer.java GUI. And the result of utilizing regular expressions for the analysis of source code syntax is obtained through the application of the six aforementioned rules, as illustrated in <xref ref-type="fig" rid="fig6">
      Figure 6
     </xref>.</p>
    <fig id="fig5" position="float">
     <label>Figure 5</label>
     <caption>
      <title>Figure 5. Example of Java code utilizing Regex for parsing Java source code.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/1733070-rId18.jpeg?20250326033151" />
    </fig>
    <fig id="fig6" position="float">
     <label>Figure 6</label>
     <caption>
      <title>Figure 6. Result of parsing source code of the Customer.java GUI.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/1733070-rId19.jpeg?20250326033151" />
    </fig>
    <p>
     <xref ref-type="fig" rid="fig6">
      Figure 6
     </xref> demonstrates that parsing the GUI source code is a pivotal step in transforming the GUI into a class diagram.</p>
    <p>The creation of an instance of the ecore metamodel results in the generation of the GUI_file.xmi file. This file serves as a concrete representation of the GUI components and their relationships as defined by the metamodel. In particular, it encapsulates detailed information about the various GUI elements, such as buttons, text fields, and labels, along with their attributes. The structured format allows for the subsequent transformation and analysis processes, providing a standardized way to manage and manipulate the data extracted from the GUI source code.</p>
    <p>The most intriguing outcome of this study is the class diagram, which is presented in <xref ref-type="fig" rid="fig7">
      Figure 7
     </xref>.</p>
    <fig id="fig7" position="float">
     <label>Figure 7</label>
     <caption>
      <title>Figure 7. Result of transforming the graphical interface into a class diagram.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/1733070-rId20.jpeg?20250326033150" />
    </fig>
    <p>As illustrated in <xref ref-type="fig" rid="fig7">
      Figure 7
     </xref>, the diagram demonstrates the transformation of the graphical interface into a structural model with clarity. The classes identified, along with their attributes and methods and the relationships between them, are described in precise detail, thereby providing a complete overview of the system. The class diagram presented in <xref ref-type="fig" rid="fig7">
      Figure 7
     </xref> was visualised using Papyrus, a UML-based modeling tool integrated into the EMF <xref ref-type="bibr" rid="scirp.141584-19">
      [19]
     </xref>.</p>
   </sec>
   <sec id="s3_2">
    <title>3.2. Analysis and Transformation of Web Source Code into UML Class Diagrams</title>
    <p>The second case study, dedicated to the analysis and transformation of HTML source code into UML class diagrams, demonstrates that the employed interfaces, designed using HTML and CSS, are not limited to simple forms, as illustrated in <xref ref-type="fig" rid="fig8">
      Figure 8
     </xref>.</p>
    <fig id="fig8" position="float">
     <label>Figure 8</label>
     <caption>
      <title>Figure 8. Web Graphical User Interface to be analyzed.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/1733070-rId21.jpeg?20250326033151" />
    </fig>
    <p>The three relevant web interfaces are dedicated to online sales and respectively address aspects related to clients and products. These graphical user interfaces comprise three pages: a registration page, a page dedicated to product purchases, and a page displaying the quantity of stock available in the database.</p>
    <fig id="fig9" position="float">
     <label>Figure 9</label>
     <caption>
      <title>Figure 9. Example of Java code utilizing Regex for parsing web page source code.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/1733070-rId22.jpeg?20250326033151" />
    </fig>
    <p>The analysis of the web source code of these interfaces using Regex yielded the results presented in <xref ref-type="fig" rid="fig9">
      Figure 9
     </xref> and <xref ref-type="fig" rid="fig10">
      Figure 10
     </xref>.</p>
    <p>
     <xref ref-type="bibr" rid="scirp.141584-"></xref></p>
    <fig id="fig10" position="float">
     <label>Figure 10</label>
     <caption>
      <title>Figure 10. Results of web page source code analysis using Regex.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/1733070-rId23.jpeg?20250326033151" />
    </fig>
    <p>The results presented in <xref ref-type="fig" rid="fig10">
      Figure 10
     </xref> highlight the elements necessary for the extraction of the class diagram, which is illustrated in <xref ref-type="fig" rid="fig11">
      Figure 11
     </xref>.</p>
    <fig id="fig11" position="float">
     <label>Figure 11</label>
     <caption>
      <title>Figure 11. UML class diagram generated from web page analysis.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/1733070-rId24.jpeg?20250326033151" />
    </fig>
    <p>Similar to the analysis and transformation of Java source code presented in the previous case study, Regex facilitates the analysis of web page source code and its transformation into a class diagram. This process employs a principle analogous to ATL, yielding the class diagram illustrated in <xref ref-type="fig" rid="fig11">
      Figure 11
     </xref>.</p>
   </sec>
  </sec><sec id="s4">
   <title>4. Discussions</title>
   <p>The GUI source code into a UML class diagram presents a number of advantages and challenges that warrant discussion. This case study examines the integrated utilization of Java, regex and ATL for model transformation. This approach is employed for the automation of the transformation of textual models into structural models, thereby facilitating a more comprehensive analysis of the software.</p>
   <p>The utilization of Java in conjunction with regex to extract data from the GUI has been demonstrated to be an effective approach. The use of regex enables the precise searching and manipulation of text patterns, which is a crucial aspect for the identification of pivotal interface components (such as buttons, text fields, and menus) and their associated properties. Furthermore, the ATL transformation language provides an exemplary of a straightforward transformation rule for the conversion of an interface component into a UML class. This rule can be extended to include additional properties, methods, and relationships between classes, thereby providing a comprehensive and accurate representation of the system’s structural model.</p>
   <p>This reverse engineering principle for the transformation of graphical components was implemented in the approach proposed by M. I. Muhairat (2011) <xref ref-type="bibr" rid="scirp.141584-11">
     [11]
    </xref>, using Optical Character Recognition (OCR) and Petri nets. The approach <xref ref-type="bibr" rid="scirp.141584-11">
     [11]
    </xref> offers an advantage in the structured recognition of interface graphical components in image mode, through OCR, and identifies the correspondences of graphical components by means of Petri nets. However, this approach <xref ref-type="bibr" rid="scirp.141584-11">
     [11]
    </xref> is limited with respect to the identification of relationship types between classes and their multiplicities for the resulting class diagram. Nevertheless, the present approach offers the possibility to extract class diagrams from source codes written in various languages (Java, HTML, etc.), taking into account the types of relationships between classes and their multiplicities. The use of Regex allows for the analysis of graphical components within the source codes, such as buttons, labels, and text fields, and is not limited to simple forms.</p>
   <p>In fact, the second case study, focusing on the analysis and transformation of HTML source code into UML class diagrams, highlights the power of Regex. These allow for the testing and extraction of information from elements present in web pages, such as, titles ( &lt; title &gt; tag), meta-descriptions, the presence of monetary symbols (€ or $), regular expressions for testing email addresses and images, page redirections via buttons, database-linked table lists, and labels, among others.</p>
   <p>The limitations of Regex in source code analysis can arise when there are no longer indices available to extract certain elements of the class diagram, even with highly sophisticated regular expressions. For example, it is possible that the attribute “Name” cannot be extracted from an HTML code if no “name” index is found, neither in the meta-description nor in other potential indices. This leads us to consider the utilization of Artificial Intelligence to extract class diagram elements from the context and the correspondence between terms present in the code and potential class diagram elements.</p>
  </sec><sec id="s5">
   <title>5. Conclusions</title>
   <p>This study has demonstrated the efficacy of a methodology combining Java, regular expressions and ATL in the transformation of graphical interfaces into UML class diagrams. The integration of these tools and techniques enabled the automation and streamlining of the transformation process, thereby facilitating a more comprehensive understanding and documentation of the structure of software systems. The use of Java and regular expressions allowed for the precise extraction of graphical user interface components, thereby facilitating their transformation into structured models. Subsequently, ATL afforded considerable flexibility in specifying transformation rules, ensuring the resulting models’ compliance with system requirements.</p>
   <p>The principal benefits of this methodology are the precision of data extraction facilitated by regular expressions, the adaptability of ATL for transforming extracted data into comprehensive class diagrams, and the automation of the transformation process, which reduces the time and effort required compared with a manual approach.</p>
   <p>Our case studies are focused on the analysis of Java and web source codes; however, due to the power of Regex, which is programming language-independent, we foresee the potential for analyzing source codes from other languages.</p>
   <p>Beyond class diagram elements, by the flexibility of Regex, it is possible to extract data. As demonstrated in our second case study, we can extract: product names, prices, stock quantities, and product descriptions, which are data that can be processed by other analyses such as data analysis, for example.</p>
   <p>And the limitation of Regex when there are no longer indices available to extract certain elements of the class diagram, leads us to resort to other techniques such as Artificial Intelligence to infer the correspondence between terms present in the code and potential elements of the class diagram, according to the contexts.</p>
  </sec><sec id="s6">
   <title>Acknowledgements</title>
   <p>I would like to extend my sincerest gratitude to all those who contributed to this work.</p>
  </sec>
 </body><back>
  <ref-list>
   <title>References</title>
   <ref id="scirp.141584-ref1">
    <label>1</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Dimbisoa, W.G., Mahatody, T. and Razafimandimby, J.P. (2018) Creating a Metamodel of UI Components in Form of Model Independant of the Platform. International Journal of Conceptions on Computing and Information Technology, 6, 48-52. 
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref2">
    <label>2</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Crampes, J.-B. and Ferry, N. (2008) SNO: High Level Model for IHM Design and Mock-Up. Electronic Journal of Information Technology, 5, 1-18.
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref3">
    <label>3</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Ferry, N. (2008) Formalisation of MACAO Method Models and Development of a Software Engineering Tool for the Creation of Man-Machine Interfaces. Ph.D. Thesis, University of Toulouse.
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref4">
    <label>4</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Telea, A.C. (2012) Reverse Engineering—Recent Advances and Applications. IntechOpen. &gt;https://doi.org/10.5772/1850
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref5">
    <label>5</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Mahfoudhi, A., Bouchelligua, W., Abed, M. and Abid, M. (2006) Towards a New Approach of Model-Based HCI Conception. Proceedings of the 6th WSEAS International Conference on Multimedia, Internet&amp;Video Technologies, Lisbon, 22-24 September 2006, 117-125. 
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref6">
    <label>6</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Lucas, F.J., Molina, F. and Toval, A. (2009) A Systematic Review of UML Model Consistency Management. Information and Software Technology, 51, 1631-1645. &gt;https://doi.org/10.1016/j.infsof.2009.04.009
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref7">
    <label>7</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Jouault, F., Allilaire, F., Bézivin, J. and Kurtev, I. (2008) ATL: A Model Transformation Tool. Science of Computer Programming, 72, 31-39. &gt;https://doi.org/10.1016/j.scico.2007.08.002
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref8">
    <label>8</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Saraiva, J.A., Campos, J.C., Silva, J.C. and Silva, C. (2012) GUIsurfer: A Reverse Engineering Framework for User Interface Software. In: Telea, A.C., Ed., Reverse Engineering—Recent Advances and Applications, IntechOpen. 
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref9">
    <label>9</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Silva, J.C., Silva, C.C., Gonçalo, R.D., Saraiva, J. and Campos, J.C. (2010) The GUISurfer Tool: Towards a Language Independent Approach to Reverse Engineering GUI Code. 2nd ACM SIGCHI Symposium on Engineering Interactive Computing Systems, Braga, June 2010. 
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref10">
    <label>10</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Favre, L. (2012) MDA-Based Reverse Engineering. In: Telea, A.C., Ed., Reverse Engineering—Recent Advances and Applications, IntechOpen. &gt;https://doi.org/10.5772/32473
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref11">
    <label>11</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Muhairat, M.I., AL-Qutaish, R.E. and Athamena, B.M. (2011) From Graphical User Interface to Domain Class Diagram: A Reverse Engineering Approach. Journal of Theoretical and Applied Information Technology, 24, 28-40. 
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref12">
    <label>12</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Mithe, R., Indalkar, S. and Divekar, N. (2013) Optical Character Recognition. International Journal of Recent Technology and Engineering (IJRTE), 2, 72-75. 
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref13">
    <label>13</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Johnson, S.C. (1986) YACC: Yet Another Compiler-Compiler. Bell Laboratories.
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref14">
    <label>14</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Levine, J.R. (2009) Flex&amp;Bison: Text Processing Tools, O’Reilly Media, Inc. 
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref15">
    <label>15</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Latif, A., Azam, F., Anwar, M.W. and Zafar, A. (2023). Comparison of Leading Language Parsers—ANTLR, Javacc, Sablecc, Tree-Sitter, Yacc, Bison. 2023 13th International Conference on Software Technology and Engineering (ICSTE), Osaka, 27-29 October 2023, 7-13. &gt;https://ieeexplore.ieee.org/abstract/document/10366650 &gt;https://doi.org/10.1109/icste61649.2023.00009 
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref16">
    <label>16</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Vinju, J. (2005) Analysis and Transformation of Source Code by Parsing and Re-writing, UvA-DARE (Digital Academic Repository). University of Amsterdam. 
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref17">
    <label>17</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Dewi, L.C., Meiliana, and Chandra, A. (2019) Social Media Web Scraping Using Social Media Developers API and Regex. Procedia Computer Science, 157, 444-449. &gt;https://doi.org/10.1016/j.procs.2019.08.237
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref18">
    <label>18</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Tisi, M., Martínez, S. and Choura, H. (2013) Parallel Execution of ATL Transformation Rules. In: Moreira, A., Schätz, B. and Gray, J., Eds., Lecture Notes in Computer Science, Springer Berlin Heidelberg, 656-672. &gt;https://doi.org/10.1007/978-3-642-41533-3_40
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref19">
    <label>19</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Brun, C. and Pierantonio, A. (2008) Model Differences in the Eclipse Modelling Framework. UPGRADE, the European Journal for the Informatics Professional, 9, 29-34. 
    </mixed-citation>
   </ref>
   <ref id="scirp.141584-ref20">
    <label>20</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Arendt, T. and Taentzer, G. (2013) A Tool Environment for Quality Assurance Based on the Eclipse Modeling Framework. Automated Software Engineering, 20, 141-184. &gt;https://doi.org/10.1007/s10515-012-0114-7
    </mixed-citation>
   </ref>
  </ref-list>
 </back>
</article>