<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Refining the Quick Fix for the Petri Net Modeling Tool Renew</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Jan Hicken</string-name>
          <email>1hicken@informatik.uni-hamburg.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Michael Haustermann</string-name>
          <email>haustermann@informatik.uni-hamburg.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Daniel Moldt</string-name>
          <email>moldt@informatik.uni-hamburg.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>University of Hamburg, Faculty of Mathematics</institution>
          ,
          <addr-line>Informatics and Natural Sciences</addr-line>
          ,
          <institution>Department of Informatics, Theoretical Foundations of Computer Science</institution>
          ,
          <addr-line>TGI</addr-line>
        </aff>
      </contrib-group>
      <fpage>275</fpage>
      <lpage>286</lpage>
      <abstract>
        <p>“Renew (The Reference Net Workshop) is an extensible Petri net IDE that supports the development and execution of highlevel Petri nets and other modeling techniques.” [3,10]. Renew allows to add Java inscriptions to elements in Reference nets, which leads to possible syntax errors. One important feature of an IDE is the instant feedback to the developer if syntax errors are detected. This enables the developer do deal with these errors at the moment they are entered and found rather than getting confronted with a large set of syntax errors at compile time. This paper presents the quick fix feature, which accomplishes this task of finding and displaying the error, suggesting possible fixes for that error and finally applying the fix automatically.</p>
      </abstract>
      <kwd-group>
        <kwd>Petri Nets</kwd>
        <kwd>Quick Fix</kwd>
        <kwd>Reference Nets</kwd>
        <kwd>Renew</kwd>
        <kwd>Parser Generator</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Many modern integrated development environments (IDEs) such as Eclipse [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ],
NetBeans [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] or IntelliJ IDEA [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] include a quick fix feature, which helps the
developer deal with syntax errors in the source code. In [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], we introduced a
transferred functionality for high-level nets in Renew, where the Java-based
inscriptions are treated analogously to source code in IDEs. This allows the
developer to be given instant feedback on occurring syntax errors by the Petri
net IDE Renew.
      </p>
      <p>
        In this paper, we define the quick fix in Section 2, outline our architecture of
this feature in Section 3 and discuss the evolutionary concept behind it during the
past development phases in Section 4. At last, we provide a detailed description
of our suggestion mechanism based on examples in Section 5. Moreover, we
illustrate, how this mechanism can be used as an auto-complete feature. The
practical usage of the quick fix is discussed in Section 6 while also pointing out
current limitations. After concluding, possible extensions and pursuing uses of
the quick fix feature are presented in the outlook in Section 8.
The American Heritage Dictionary describes the etymology of the quick fix as
follows: “An easy and quick repair or remedy, especially a hastily contrived
remedy that alleviates a problem only for the time being” [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. We actually see the
quick fix as a permanent and sufficient repair to a problem, but except for the
last part of this definition, it fits our understanding quite well.
      </p>
      <p>
        In contrast to the refactoring [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], which Fowler defines as “a change made to
the internal structure of software to make it easier to understand and cheaper to
modify without changing its observable behavior” [5, p. 53], a quick fix changes
the observable behavior of a software. For example, renaming all variable
references in a given context is considered a refactoring. In contrast to that, renaming
an incorrect reference to the correct one counts as a quick fix. Technically, this
Syntax Error
Constructor not found
Method signature not found
Field not found
Variable not declared
Variable and assignment content not
compatible
Class not found
      </p>
      <p>
        Possible Fix
Use other constructor, use factory class
Use other method, change given
parameters
Use other field from same class or field
with that name from other class
Declare variable in declaration node
Change variable type or assignment
content
Create new import statement for class
found in classpath
seems very similar but the former is considered to be out of scope for this paper
and is dealt with in [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
      </p>
      <p>The typical process for the quick fix is illustrated in Figure 1: First, a syntax
error has to be found and presented to the developer, so it can be addressed.
Next, possible fixes have to be suggested. The developer can decide, whether
there is a fix among the suggestions that alleviates the error and is semantically
correct. If so, the fix needs to be applied to the current implementation, otherwise
the developer can discard the suggestions and solve the problem on his own. If the
developer considers the applied fix not to be appropriate, the fix can be undone,
which reverts it to the starting point. In Section 3, we explain the architecture
to implement this process in the context of Renew.</p>
      <p>Depending on the defined grammar the parser is doing its work on, a variety
of different syntax errors can occur. For Renew, we want to address the syntax
errors listed in Table 1 using the quick fix feature.
3</p>
    </sec>
    <sec id="sec-2">
      <title>Architecture</title>
      <p>
        Renew enables us to use Java code as inscriptions in Reference nets for
transitions, arcs and places. Furthermore, an additional figure, the declaration node,
contains Java import statements and variable declarations. These inscriptions
are not pure Java code but Java enriched with additional Reference net-specific
syntax (see [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] for details about the inscriptions language). As these inscription
are entered as plain text, they obviously can contain syntax errors made by the
developer. The quick fix feature addresses these syntax errors in the net, which
are found through the net parser; we use JavaCC [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] for that purpose. We define
the grammar for the different net figure inscriptions using the JavaCC grammar,
which is then compiled to a Java parser class. This class is able to find syntax
errors, which originate from parsing errors considering the given grammar, and
provide additional information about the error wrapped in a Java exception
class, which is called SyntaxException.
      </p>
      <p>Whenever a parsing of an inscription is triggered, e. g. after changing it or
before a simulation process is started, syntax exceptions may be thrown by the
parser or any back-end class and need to be caught and dealt with by the user
interface. More precisely, a throw of this SyntaxException is the trigger for the
quick fix. Each different trigger should comply with a different subclass of that
exception and thereby provide the information on what suggestion mechanism
should be associated with it. Moreover, the exception should hold detailed
information about the error to enable contextualization of the specific suggestion
mechanism.</p>
      <p>Transferring this to Table 1, each row defines a tuple consisting of a trigger
(column 1) and a suggestion mechanism (column 2).
4</p>
    </sec>
    <sec id="sec-3">
      <title>Evolutionary Concept</title>
      <p>In a very first approach, we developed a frame which would simply display the
specific error message given by the parser. This is shown in Figure 2 and Figure 3
in the upper part of the dialog. In this example, this includes the corresponding
line and column as well as the specific error message. This functionality
implements step 1 of the quick fix process (see Figure 1). In addition to the error
message, this information includes the specific figure, whose inscription contains
the syntax error. The developer can find the originating inscription by pressing
the Select button as seen in Figure 3. Especially in very large nets, this
information helps to find the culprit quickly and understand, why the net cannot
be compiled. Moreover, we added the option to trigger the syntax check
manually by clicking a button in the IDE. This allows the developer to constantly
check the net for errors while extending it incrementally. However, sometimes
the messages generated by the generic JavaCC parser tend to be rather
cryptic, especially regarding structuring errors, such as a missing closing bracket or
semicolon.</p>
      <p>A first improvement considers to add a list of possible expressions for a given
syntax error. For example, a list of a class’ defined methods is presented to the
developer if the parser cannot parse a given method call. This feature required
a fundamental change providing the error message, because we need to include
contextualized information about the net and make use of the Java Reflection
API to determine the suggestions. The developer is now able to compare the
implementation with the possible, correct alternatives and rectify it. As a result,
we now supply the user interface’s error dialog with a detailed error message
and an array of feasible fixes. This leads to automation of the second step of the
quick fix process. A much more sophisticated suggestion mechanism is explained
in Section 5.</p>
      <p>The application of suggested expressions is an error-prone manual task, so
we wanted to automate it, too. To achieve this, we need information about the
precise location of the error’s origin in the source code. JavaCC generates
tokenbased parsers, which are able to supply information about exceptional tokens and
their location in the parsed text. This information can be used to add or replace
source code in the implementation based on what has been entered already and
which suggestion the developer chose to be applied. For example, if the developer
tries to add values to a map, the following two expressions have to be treated
differently:
map.pt(key, value);
map.add(value);
In the first line, the developer seems to have made a typing error and forgot
the u in put. In this case, we can leave almost everything as it is and just add
the missing letter. In the second example, the developer tries to add a value to
the map as if it were a simple collection. In this context, we need to alter the
method name as well as the parameter specification, prompting the developer for
an additional one. As this simple example demonstrates, the application of quick
fix suggestions is not trivial and has to be specified precisely for each suggestion.
The specification also has to support a parameterization, so the different contexts
can be handled appropriately.</p>
      <p>Every action the developer performs in the editor can be undone using
Renew’s Undo operation. This also applies to the application of quick fixes
allowing the developer to “preview” and undo it, if not satisfied.</p>
      <p>As a result, we have automated nearly all activities of the quick fix process,
except the decision for the correct fix among the suggestions. Considering this
step, we support the developer by ordering the suggestions by relevance. In some
cases, the suggestion mechanism is nearly sure, which suggestion is the right one,
in other cases it is only able to provide a broad list. This is obviously dependent
on what the developer has already entered and will be explained further in
Section 5.
5</p>
    </sec>
    <sec id="sec-4">
      <title>Suggestion Mechanism</title>
      <p>The first, trivial suggestion mechanism described in Section 3 is a bottleneck
for our quick fix process, leading to a high number of Abort decisions due to
missing suitable fixes. To address this, we introduce a much more sophisticated
mechanism for Java class members (Subsection 5.1) and variable declarations
(Subsection 5.2).
5.1</p>
      <sec id="sec-4-1">
        <title>Suggesting Class Members</title>
        <p>At first, we want to provide a suggestion mechanism for class members. In the
Java world, this includes class fields and methods.</p>
        <p>Considering fields, the choices consist of the declared and accessible fields for
a denoted class in the source code. If an entered field is unknown, the quick fix
can provide a list of fields using the Java Reflect API. However, this can lead to
a lot of choices being presented to the developer, when the class defines a great
amount of fields. In order to address excessive lists of suggestions, lists may be
filtered to fields having the same prefix as entered by the developer.</p>
        <p>Similar to the fields, methods can also be searched by using the Java Reflect
API. Filtering the list of methods declared by a class may also be done by
comparing prefixes. In addition to that, the entered parameters need to be considered
when providing suggestions to the user. If the developer entered a method giving
the wrong parameter types, the feature can suggest possible method overloads.
An example of this mechanism is demonstrated in Figure 2.</p>
        <p>This mechanism only considers available class members, which have been
declared once in the source code. Generating missing class members the developer
references in the net could also be a viable solution. However, we use an external
Java IDE to manage and develop our Java source code. In that case, we would
need an inter-process communication channel to propagate the required changes
to that IDE. Furthermore, the changed source code would need to be compiled
in order to be recognized by Renew, so that the syntax error disappears. We
consider this to be too much effort in the current state of development.
5.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Suggesting Variable Declarations</title>
        <p>Variables, that are used in the Petri net can be declared in Renew’s
declaration node. If the net contains a declaration node with at least one declared
variable, all used variables have to be declared. An undeclared variable causes the
quick fix to suggest possible types for that variable and adding the corresponding
statement in the declaration node.</p>
        <p>When assigning a value to a variable, the value can either be a literal, a
newly constructed object or the returned value from a method call. Determining
the type in the first case is trivial, because the corresponding literal’s primitive
type can be evaluated by the compiler immediately. An example of this is given
in Figure 3, note that the corresponding package java.util has already been
imported. To determine the type of a newly constructed object, the constructor’s
class name has to be well-known, which means the class name is either fully
qualified or an already imported class, as seen in Figure 3. Given the case of
a well-known class name, the corresponding declaration statement can also be
generated easily. Moreover, the information of a fully-qualified class name can be
used to construct an import statement for that class or its whole package right
away. The last case is also rather trivial, because the return type of a method
and its corresponding class object can be determined using the Java Reflect API.
5.3</p>
      </sec>
      <sec id="sec-4-3">
        <title>Using the Quick Fix as an Auto-complete Feature</title>
        <p>Without suggestions for Java class members, the developer needs to look
up every used member in the API documentation. That would require one or
more additional applications and their windows to be present in the developer’s
working environment and tool set. On the one hand, the developer can fix typos
or missing parameters etc. using the quick fix suggestions. On the other hand,
the quick fix can change the workflow by providing an overview over the class’
members, if the developer enters an empty member name on purpose. Pursuing
this approach, the quick fix can be used similar to an auto-complete feature
regarding Java class members. For that purpose, we enable the possibility to use
an underscore as a wildcard character in order to get a list of all fields or all
methods by attaching a pair of round brackets as a suffix. An example of this
mechanism is illustrated in Figure 4.</p>
        <p>This approach is transferable to variable suggestions analogously considering
this example (see also Figure 3): If the developer wanted to construct a new
ArrayList and assign it to a variable called list, the assignment on a transition
as well as a corresponding entry in the declaration node would be necessary. Now,
the developer can specify the former as needed and omit the latter on purpose
and let the declaration be automatically done by the quick fix.</p>
        <p>In a nutshell, by providing the quick fix feature, we not only accelerate the
development process by supporting the developer finding and fixing errors but
also change the developer’s workflow while modeling Reference nets. We thereby
streamlined the whole development process by enabling a much faster
development in an integrated environment.
6</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Discussion</title>
      <p>
        Due to Renew’s various different configurations and large number of plugins
available, the IDE is used in different contexts for many different purposes. For
example, one can use it as a process modeling tool such as creating the net seen
in for Figure 1, simulate basic P/T nets or even develop agent-oriented software
systems using the Mulan/Capa framework [
        <xref ref-type="bibr" rid="ref13 ref4">13,4</xref>
        ] with the Paose approach [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
Most likely, the quick fix will neither be used nor triggered considering the use
case of the first two examples. In contrast to that, it is very likely, that
developers working with the Paose appraoch know the quick fix very well and use it
constantly. Hence the quick fix feature will remain hidden for a significant
portion of Renew’s users, especially because the interaction depends on the defined
triggers completely.
      </p>
      <p>
        Developers, that use Renew in conjunction with Mulan/Capa in order to
develop multi-agent software systems, have to deal with a large number of
different ontologies, which in turn contain defined concepts (see [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]). These specified
ontology concepts are transformed into Java class definitions. As a result, the
developers need to develop against a constantly changing API, where the quick
fix comes in highly valuable.
      </p>
      <p>As already explained in Subsection 5.2, suggestions for variable
declarations can currently be inferred, if the right part of the assignment expression
is parseable and the expression’s type is known. In particular, this is not true,
if the type’s class has not been imported yet, even if it is available in the Java
classpath. Supporting this depends highly on the ability to automatically import
classes found in the classpath and let the developer choose from possible
alternatives. Moreover, variables also occur in arc inscriptions. In this case, inferring
the type requires an analyzation of other in- and outgoing arcs regarding the
particular place or transition and its inscriptions.</p>
      <p>
        The already mentioned IDEs Eclipse (using JDT [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]), NetBeans and IntelliJ
(Community Edition) provide similar features within their frameworks, which are
available as open-source. However, the fact that the inscriptions in our Reference
nets are not fully Java-compliant, because they can contain calls to synchronous
channels for example, requires us to adapt these frameworks to our grammar.
All three frameworks do not use a parser generator for their Java parsers, which
highly increases the required effort to adapt them. Moreover, the existing tools
do now allow to throw in single statements to be parsed without a given context.
Normally, the context would be given through the enclosing class file containing
imports etc., in Renew, we use the declaration node for import and variable
declaration statements. These circumstances would also need to be customized.
In a nutshell, the frameworks deliver the desired quick fix functionalities but
lack customizability for other grammars. The adaption and maintenance for a
second Java parser framework to be incorporated with Renew is considered too
much effort.
7
      </p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>
        Firstly, we provide a definition of the quick fix, that is already part of many
modern IDEs such as Eclipse [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], NetBeans [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] or IntelliJ IDEA [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. We also
define a process for the quick fix in Figure 1 and an exemplary list of quick fix
scenarios in Table 1.
      </p>
      <p>Considering the architecture, we show that profound changes to the parser
and UI were necessary to realize the implementation. We introduce an extensible
architecture using Java exceptions with inheritance as triggers and the
opportunity to incorporate arbitrary suggestion mechanisms.</p>
      <p>The evolutionary concept behind the feature has been explained in detail in
Section 4. Each step incrementally increased the usability of our IDE by
providing automation of reoccurring tasks while also requiring precise specifications.
Thus, we achieved an automation and support of most of the activities in the
quick fix process.</p>
      <p>In addition to that, using the quick fix as an auto-complete feature changes
the development workflow by also providing a quick overview over the used
API as discussed in Subsection 5.3. Thus, the quick fix not only accelerates the
development process but also streamlines it in a way, that makes use of more
integrated features in the Renew environment.
8</p>
    </sec>
    <sec id="sec-7">
      <title>Outlook</title>
      <p>Currently, the triggers for the quick fix mechanism are based on syntax errors
found by the net parser (see Table 1). Many common compilers differentiate
between syntax errors and warnings, which for example indicate possible runtime
errors. These warnings can also be treated using the quick fix analogously to
errors while also indicating a lower severity.</p>
      <p>Moreover, the extensible architecture allows us to define arbitrary triggers
and corresponding suggestion mechanisms. Hence, the quick fix can support
achieving not only a correct syntax but also arbitrary properties of the software
system. For example, if the property of a cycle-free net is required, a detection
algorithm can serve as a trigger for the quick fix while providing possible changes
to break the cycle as suggestions.</p>
      <p>Furthermore, the intent of “abusing” the quick fix suggestions as a quick
overview over an API can be supported by extending the overview with
additional documentation content. More precisely, a method suggestion can be
extended by providing the corresponding Javadoc.</p>
      <p>The current implementation provides quick fixes only for Java related
problems. Since the used inscription language also contains Reference net specific
syntax it should also be possible to provide fixes for respective errors. The parser
is already capable of detecting erroneous syntax, but many problems can first
be discovered during runtime. For example, the unifiability of a synchronous
channel may fail as a result of a wrong channel name entered by the developer.
Extending the quick fix for these kind of errors requires a different architecture
and mechanism of error detection.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>American Heritage R</surname>
          </string-name>
          <article-title>Dictionary of the English Language</article-title>
          . Houghton Mifflin Harcourt Publishing Company, fifth edn. (
          <year>2011</year>
          ), quick fix
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Cabac</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Modeling Petri Net-Based Multi-Agent Applications</article-title>
          ,
          <source>Agent Technology - Theory and Applications</source>
          , vol.
          <volume>5</volume>
          . Logos Verlag, Berlin (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Cabac</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Haustermann</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mosteller</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Renew 2.5 - towards a comprehensive integrated development environment for Petri net-based applications</article-title>
          . In: Kordon,
          <string-name>
            <given-names>F.</given-names>
            ,
            <surname>Moldt</surname>
          </string-name>
          ,
          <string-name>
            <surname>D</surname>
          </string-name>
          . (eds.) 37th
          <source>International Conference on Application and Theory of Petri Nets, Toruń, Poland. Lecture Notes in Computer Science</source>
          , vol.
          <volume>9698</volume>
          . Springer-Verlag (
          <year>Jun 2016</year>
          ), (to be published)
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Duvigneau</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moldt</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rölke</surname>
          </string-name>
          , H.:
          <article-title>Concurrent architecture for a multi-agent platform</article-title>
          . In: Giunchiglia,
          <string-name>
            <given-names>F.</given-names>
            ,
            <surname>Odell</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Weiß</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G</given-names>
            . (eds.)
            <surname>Agent-Oriented Software</surname>
          </string-name>
          Engineering III. Third International Workshop, Agent-oriented
          <source>Software Engineering (AOSE)</source>
          <year>2002</year>
          , Bologna, Italy,
          <year>July 2002</year>
          .
          <source>Revised Papers and Invited Contributions. Lecture Notes in Computer Science</source>
          , vol.
          <volume>2585</volume>
          , pp.
          <fpage>59</fpage>
          -
          <lpage>72</lpage>
          . Springer-Verlag, Berlin Heidelberg New York (
          <year>2003</year>
          ), http://dx.doi.org/10.1007/ 3-540-36540-
          <issue>0</issue>
          _
          <fpage>5</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Fowler</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Refactoring: Improving the Design of Existing Code</article-title>
          . Addison-Wesley, Boston, MA, USA (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Friedrich</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moldt</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Introducing Refactoring for Reference Nets</article-title>
          . In: Petri Nets and
          <string-name>
            <given-names>Software</given-names>
            <surname>Engineering</surname>
          </string-name>
          . International Workshop, PNSE'16,
          <string-name>
            <surname>Torun</surname>
          </string-name>
          , Poland, June 20-21,
          <year>2016</year>
          . Proceedings (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Hicken</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cabac</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Haustermann</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Introducing the quick fix for the Petri net modeling tool Renew</article-title>
          . In: Moldt,
          <string-name>
            <given-names>D.</given-names>
            ,
            <surname>Rölke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            ,
            <surname>Störrle</surname>
          </string-name>
          , H. (eds.) Petri Nets and
          <string-name>
            <given-names>Software</given-names>
            <surname>Engineering</surname>
          </string-name>
          . International Workshop, PNSE'
          <fpage>15</fpage>
          , Brussels, Belgium, June 22-23,
          <year>2015</year>
          .
          <source>Proceedings. CEUR Workshop Proceedings</source>
          , vol.
          <volume>1372</volume>
          , pp.
          <fpage>317</fpage>
          -
          <lpage>318</lpage>
          . CEUR-WS.org (
          <year>2015</year>
          ), http://CEUR-WS.org/Vol-1372
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>JavaCC</given-names>
            <surname>Project: JavaCC - Java Compiler Compiler - The Java Parser Generator</surname>
          </string-name>
          (
          <year>Apr 2016</year>
          ), https://javacc.java.net/
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9. Jetbrains s.r.o.:
          <string-name>
            <surname>IntelliJ IDEA - Capable</surname>
            and
            <given-names>Ergonomic Java IDE</given-names>
          </string-name>
          (
          <year>Apr 2016</year>
          ), https://www.jetbrains.com/idea/
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Kummer</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wienberg</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Duvigneau</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cabac</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Haustermann</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mosteller</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          : Renew - the Reference Net Workshop. Available at: http://www. renew.de/ (
          <year>Jun 2016</year>
          ), http://www.renew.de/, release 2.
          <fpage>5</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Kummer</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wienberg</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Duvigneau</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cabac</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Haustermann</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mosteller</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          : Renew - User
          <source>Guide (Release 2.5)</source>
          . University of Hamburg, Faculty of Informatics, Theoretical Foundations Group,
          <source>Hamburg (Jun</source>
          <year>2016</year>
          ), http: //www.renew.de/
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Netbeans</surname>
            <given-names>Community: Netbeans IDE</given-names>
          </string-name>
          (
          <year>Apr 2016</year>
          ), https://netbeans.org/
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Rölke</surname>
          </string-name>
          , H.:
          <article-title>Modellierung von Agenten und Multiagentensystemen - Grundlagen und Anwendungen</article-title>
          ,
          <source>Agent Technology - Theory and Applications</source>
          , vol.
          <volume>2</volume>
          . Logos Verlag, Berlin (
          <year>2004</year>
          ), http://logos-verlag.de/cgi-bin/engbuchmid?isbn= 0768&amp;lng=eng&amp;id=
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <article-title>The Eclipse Foundation: Eclipse: The Eclipse Foundation open source community website</article-title>
          (
          <year>Apr 2016</year>
          ), http://www.eclipse.org/
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>The Eclipse Foundation: JDT - Java Development Tools</surname>
          </string-name>
          (
          <year>Apr 2016</year>
          ), http:// projects.eclipse.org/projects/eclipse.jdt
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>