Exemplo n.º 1
0
 protected String getInfo(String name, List<String> parameters) throws IllegalActionException {
   ptolemy.domains.fsm.kernel.FSMActor fa = (ptolemy.domains.fsm.kernel.FSMActor) getComponent();
   if (name.equals("initState")) {
     return fa.getInitialState().getName();
   }
   if (name.equals("transitions")) {
     ArrayList transitions = new ArrayList();
     for (State s : (List<State>) fa.entityList(State.class)) {
       transitions.addAll(s.outgoingPort.linkedRelationList());
     }
     return new ListTerm<Transition>("emptyTransitionSet", " ;" + _eol, transitions) {
       public String item(Transition t) throws IllegalActionException {
         return ((RTMaudeAdaptor) _getHelper(t)).generateTermCode();
       }
     }.generateCode();
   }
   return super.getInfo(name, parameters);
 }
Exemplo n.º 2
0
  /**
   * Generate mode code for the FSM. Notice the refinements share same inputs and outputs. Here, the
   * mode, state and refinement have same meaning.
   *
   * @param fsm The FSM generated mode code from.
   * @param inputPorts The inputs of fsm model.
   * @param outputPorts The outputs of fsm model.
   * @return The fsm submode code.
   */
  private String _fsmModeCode(FSMActor fsm, String inputPorts, String outputPorts)
      throws IllegalActionException {
    String subModeCode = "";
    String transitionString = "";

    transitionString +=
        ("  trans from default to "
            + fsm.getInitialState().getName()
            + _endLine
            + "  when ( true ) do { } "
            + _endLine);

    ListIterator stateIterator = fsm.entityList().listIterator();

    while (stateIterator.hasNext()) {
      State st = (State) stateIterator.next();

      if (st.getRefinement() != null) {
        Actor[] refinements = st.getRefinement();
        CompositeActor refinement = (CompositeActor) refinements[0];
        String stParameters = _agentParameters(refinement, false);
        String typedStParameters = _agentParameters(refinement, true);
        String flowString = "";
        String invariantString = "";

        _modeCode +=
            ("  mode "
                + st.getName()
                + " = "
                + st.getName()
                + "Mode"
                + " ( "
                + stParameters
                + " );"
                + _endLine);

        flowString = _graphToText(refinement);

        ListIterator assertions = _assertions(refinement).listIterator();

        while (assertions.hasNext()) {
          Assertion assertion = (Assertion) assertions.next();

          if (invariantString.length() == 0) {
            invariantString = "inv { " + assertion.assertion.getExpression();
          } else {
            invariantString += (" ; " + assertion.assertion.getExpression());
          }

          invariantString += " } ";
        }

        subModeCode +=
            ("mode "
                + st.getName()
                + "Mode "
                + "( "
                + typedStParameters
                + " )"
                + _endLine
                + "{"
                + _endLine
                + "  "
                + outputPorts
                + _endLine
                + "  "
                + inputPorts
                + _endLine
                + "  "
                + flowString
                + _endLine
                + "  "
                + invariantString
                + _endLine
                + "}"
                + _endLine);

        LinkedList transitionList = new LinkedList();
        transitionList.addAll(st.preemptiveTransitionList());
        transitionList.addAll(st.nonpreemptiveTransitionList());

        ListIterator transitionItr = transitionList.listIterator();

        while (transitionItr.hasNext()) {
          Transition tr = (Transition) transitionItr.next();
          State newState = tr.destinationState();
          String guardString = tr.getGuardExpression();
          transitionString +=
              ("  trans from "
                  + st.getName()
                  + " to "
                  + newState.getName()
                  + _endLine
                  + "  when ( "
                  + guardString
                  + ") "
                  + _endLine
                  + "  do {}"
                  + _endLine);
        }
      }
    }

    _modeCode += (transitionString + _endLine);

    return subModeCode;
  }