Exemple #1
0
  public static void main(String[] args) {

    try {
      Scanner consoleInput = new Scanner(System.in);
      System.out.println("Enter file name: ");
      String fileName = consoleInput.next();

      if (!fileName.endsWith(".t")) {
        System.out.println("Expecting a LOGO file");
        return;
      }

      Root program = Parser.parse(Lexer.tokenise(FileManager.contentsOfFile(fileName)));

      System.out.println("Enter output file name");
      String outFileName = consoleInput.next();
      if (!outFileName.endsWith(".ps") && !outFileName.endsWith(".eps")) {
        outFileName += ".ps";
      }

      String output = CodeGenerator.generateCodeText(program);

      if (ErrorLog.containsErrors()) {
        ErrorLog.displayErrors();
        return;
      } else {
        FileManager.writeStringToFile(output, outFileName);
      }

    } catch (FileNotFoundException e) {
      System.out.println(e.getMessage());
    } catch (IOException IO) {
      System.out.println(IO.getMessage());
    }
  }
Exemple #2
0
 public void deOrbit() {
   if (internalState == cevStatesEarthOrbit) {
     if (internalEarthOrbitState == earthOrbitStatesOrbitOps) {
       assert spacecraft.readyForDeorbit() : errors.last();
       internalState = cevStatesEntry;
       return;
     }
     if (internalEarthOrbitState == earthOrbitStatesSafeHold) {
       assert spacecraft.readyForDeorbit() : errors.last();
       internalState = cevStatesEntry;
       return;
     }
   }
   assert false;
 }
Exemple #3
0
  // @Params("<5000|120000|200000>, <true|false>") -not yet in the model
  public void abort(int altitude, boolean controlMotorFired) {
    if (internalState == cevStatesAscent) {
      if (internalAscentState == ascentStatesFirstStage) {
        spacecraft.doStage1Abort(altitude, controlMotorFired);
        if (altitude <= 120000) {
          if (controlMotorFired) {
            internalAscentState = ascentStatesAbortLowActiveLAS;
          } else {
            internalAscentState = ascentStatesAbortPassiveLAS;
          }
        }
        if (altitude >= 120000) { // <ERR> interval overlap -> ambiguity
          // TODO: Are this errors supposed to be found?
          // Should this reamin or not?
          internalAscentState = ascentStatesAbortHighActiveLAS;
          // <ERR> forgotten controlMotor branch
        }
        return;
      }
      if (internalAscentState == ascentStatesSecondStage) {
        spacecraft.doStage2Abort(controlMotorFired);

        if (controlMotorFired) {
          internalAscentState = ascentStatesAbortHighActiveLAS;
        } else {
          internalAscentState = ascentStatesAbortPassiveLAS;
        }
        return;
      }
    }
    // assert hasNextState() : errors.log("abort command did not enter abort state");
    // TODO: What does hasNextState?
    assert false : errors.log("abort command did not enter abort state");
  }
Exemple #4
0
 public void teiBurn() {
   if (internalState == cevStatesLunarOps) {
     if (internalLunarOpsState == lunarOpsStatesLunarOrbit) {
       assert spacecraft.readyForTeiBurn() : errors.last();
       internalState = cevStatesTransitMoonEarth;
     }
   }
   assert false;
 }
Exemple #5
0
 public void tliBurn() {
   if (internalState == cevStatesEarthOrbit) {
     if (internalEarthOrbitState == earthOrbitStatesOrbitOps) {
       assert spacecraft.readyForTliBurn() : errors.last();
       internalState = cevStatesTransitEarthMoon;
       return;
     }
   }
   assert false;
 }
Exemple #6
0
 public void lsamRendezvous() {
   if (internalState == cevStatesEarthOrbit) {
     if (internalEarthOrbitState == earthOrbitStatesOrbitOps) {
       assert spacecraft.readyForLSAMrendezvous() : errors.last();
       spacecraft.doLSAMrendezvous();
       return;
     }
   }
   assert false;
 }
Exemple #7
0
 public void eiBurn(boolean cmImbalance, boolean rcsFailure) {
   if (internalState == cevStatesTransitMoonEarth) {
     // spacecraft should now only consist of CM
     assert spacecraft.readyForEiBurn() : errors.last();
     spacecraft.doEiBurn(cmImbalance, rcsFailure);
     if (cmImbalance) {
       internalState = cevStatesEntry;
       internalEntryState = entryStatesAbortEntryBallistic;
     } else if (rcsFailure) {
       internalState = cevStatesEntry;
       internalEntryState = entryStatesAbortEntryFixedBank;
     } else {
       internalState = cevStatesEntry;
     }
     return;
   }
   assert false;
 }
Exemple #8
0
 public void completion() {
   if (internalState == cevStatesAscent) {
     if (internalAscentState == ascentStatesHoldLaunch) {
       internalState = cevStatesEndState;
       return;
     }
     if (internalAscentState == ascentStatesPadAbort) {
       internalState = cevStatesEndState;
       return;
     }
     if (internalAscentState == ascentStatesAbortPassiveLAS) {
       spacecraft.doLowPassiveAbort();
       internalState = cevStatesEntry;
       internalEntryState = entryStatesChuteSequence;
       return;
     }
     if (internalAscentState == ascentStatesAbortLowActiveLAS) {
       assert failures.noLAS_CNTRLfailure() : errors.log("active LAS with failed control motor");
       spacecraft.doLowActiveAbort();
       internalState = cevStatesEntry;
       internalEntryState = entryStatesChuteSequence;
       return;
     }
     if (internalAscentState == ascentStatesAbortHighActiveLAS) {
       assert failures.noLAS_CNTRLfailure() : errors.log("active LAS with failed control motor");
       internalState = cevStatesEntry;
       internalEntryState = entryStatesChuteSequence;
       return;
     }
   }
   if (internalState == cevStatesEarthOrbit) {
     if (internalEarthOrbitState == earthOrbitStatesInsertion) {
       if (failures.noEARTH_SENSORfailure()) {
         internalEarthOrbitState = earthOrbitStatesOrbitOps;
       } else {
         internalEarthOrbitState = earthOrbitStatesSafeHold;
         // <ERR> never reached
       }
       return;
     }
   }
   if (internalState == cevStatesLunarOps) {
     if (internalLunarOpsState == lunarOpsStatesInsertion) {
       internalLunarOpsState = lunarOpsStatesLunarOrbit;
       return;
     }
     if (internalLunarOpsState == lunarOpsStatesLunarLanding) {
       internalLunarOpsState = lunarOpsStatesLunarOrbit;
     }
   }
   if (internalState == cevStatesEntry) {
     if (internalEntryState == entryStatesEntryInterface) {
       internalEntryState = entryStatesNominalEntry;
       return;
     }
     if (internalEntryState == entryStatesNominalEntry) {
       internalEntryState = entryStatesChuteSequence;
       return;
     }
     if (internalEntryState == entryStatesChuteSequence) {
       assert spacecraft.readyForChuteSequence() : errors.last();
       internalEntryState = entryStatesLanding;
       return;
     }
     if (internalEntryState == entryStatesLanding) {
       internalState = cevStatesEndState;
       return;
     }
     if (internalEntryState == entryStatesAbortEntryBallistic) {
       internalEntryState = entryStatesChuteSequence;
       return;
     }
     if (internalEntryState == entryStatesAbortEntryFixedBank) {
       internalEntryState = entryStatesChuteSequence;
       return;
     }
     if (internalState == cevStatesLunarOps) {
       if (internalLunarOpsState == lunarOpsStatesLunarLanding) {
         if (internalLunarLandingLSAMState == lunarLandingLSAMStatesLunarDescent) {
           internalLunarLandingLSAMState = lunarLandingLSAMStatesSurfaceOps;
           return;
         }
       }
     }
   }
   assert false;
 }