Moar cleanup

This commit is contained in:
weckyy702
2021-01-17 23:37:07 +01:00
parent d2f157a523
commit 33dfcc9108
4 changed files with 319 additions and 313 deletions

View File

@@ -81,19 +81,19 @@ class if_instruction(Iinstruction):
return max(self._getblkwidth(), self.get_truewidth() + self.get_falsewidth())
def get_truewidth(self) -> float:
w = 0.0
w = 50
for inst in self.true_case:
w += inst.getblkwidth()
w = max(w, inst.getblkwidth())
return w
def get_falsewidth(self) -> float:
w = 0.0
w = 50
if self.false_case:
for inst in self.false_case:
w += inst.getblkwidth()
w = max(w, inst.getblkwidth())
return w
@@ -161,9 +161,9 @@ class while_instruction_front(Iinstruction):
return children_sz
def get_children_width(self) -> float:
w = 0.0
w = 50.0
for inst in self.child_instructions:
w += inst.getblkheight()
w = max(w, inst.getblkheight())
return w
def getblkheight(self) -> float:

View File

@@ -0,0 +1,24 @@
from typing import Iterable, List
from draw.Iinstruction import Iinstruction
class Function_scope(Iterable):
def __init__(self, child_instructions: List[Iinstruction], name: str, return_type: str, args: List[str]) -> None:
self.contents = child_instructions
self.name = name
self.return_type = return_type
self.args = args
def get_height(self) -> int:
h = 0.0
for inst in self.contents:
h += inst.getblkheight()
return int(h)
def get_width(self) -> int:
w = 200.0
for inst in self.contents:
w = max(w, inst.getblkwidth())
return int(w)
def __iter__(self):
return self.contents.__iter__()

View File

@@ -4,6 +4,7 @@ from typing import Dict, List, Match, Tuple, Union
from errors.custom import InterpreterException, JavaSyntaxError, ScopeNotFoundException
from draw.Iinstruction import *
from interpreter.Function_scope import Function_scope
logging.warning("""Because the Interpreter is still WIP, some Java language features are not supported. These include:
*foreach loops (will throw JavaSyntaxError)
@@ -12,28 +13,6 @@ logging.warning("""Because the Interpreter is still WIP, some Java language feat
*Generics
Please remove these features from the source code as they will result in incorrect behaviour""")
class Function_scope(Iterable):
def __init__(self, child_instructions: List[Iinstruction], name: str, return_type: str, args: List[str]) -> None:
self.contents = child_instructions
self.name = name
self.return_type = return_type
self.args = args
def get_height(self) -> int:
h = 0.0
for inst in self.contents:
h += inst.getblkheight()
return int(h)
def get_width(self) -> int:
w = 200.0
for inst in self.contents:
w = max(w, inst.getblkwidth())
return int(w)
def __iter__(self):
return self.contents.__iter__()
class JavaInterpreter:
def __init__(self, filepath: str) -> None:

View File

@@ -1,331 +1,334 @@
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
// import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
//Comment that the interpreter may never know of
// //Comment that the interpreter may never know of
public class Rover extends Actor
{
private Display anzeige;
// public class Rover extends Actor
// {
// private Display anzeige;
/**
* this function is to be implemented by the user
* depending on the needed actions
*/
// /**
// * this function is to be implemented by the user
// * depending on the needed actions
// */
public Display getDisplay()
{
return anzeige;
}
// public Display getDisplay()
// {
// return anzeige;
// }
public void act()
{
S66Nr3(7);
}
// public void act()
// {
// S66Nr3(7);
// }
private void fahreUmHuegel(String richtung)
{
String pri;
String sec;
if(richtung.equals("Hoch")) {
pri = "links";
sec = "rechts";
} else if (richtung.equals("Runter")) {
pri = "rechts";
sec = "links";
} else {
nachricht("JUNGE DU SPAST!");
return;
}
drehe(pri);
fahre();
drehe(sec);
fahre();
fahre();
drehe(sec);
fahre();
drehe(pri);
}
// private void fahreUmHuegel(String richtung)
// {
// String pri;
// String sec;
// if(richtung.equals("Hoch")) {
// pri = "links";
// sec = "rechts";
// } else if (richtung.equals("Runter")) {
// pri = "rechts";
// sec = "links";
// } else {
// nachricht("JUNGE DU SPAST!");
// return;
// }
// drehe(pri);
// fahre();
// drehe(sec);
// fahre();
// fahre();
// drehe(sec);
// fahre();
// drehe(pri);
// }
private void fahreBisHuegel()
{
while(!huegelVorhanden("vorne"))
{
fahre();
}
}
// private void fahreBisHuegel()
// {
// while(!huegelVorhanden("vorne"))
// {
// fahre();
// }
// }
private void fahreZeileDreheHoch()
{
fahreBisHuegel();
fahreUmHuegel("Hoch");
fahreBisHuegel();
drehe("um");
// private void fahreZeileDreheHoch()
// {
// fahreBisHuegel();
// fahreUmHuegel("Hoch");
// fahreBisHuegel();
// drehe("um");
fahreBisHuegel();
fahreUmHuegel("Runter");
fahreBisHuegel();
drehe("rechts");
fahre();
drehe("rechts");
}
// fahreBisHuegel();
// fahreUmHuegel("Runter");
// fahreBisHuegel();
// drehe("rechts");
// fahre();
// drehe("rechts");
// }
private void fahreZeileDreheRunter(boolean geheInNächsteZeile)
{
fahreBisHuegel();
fahreUmHuegel("Runter");
fahreBisHuegel();
drehe("um");
// private void fahreZeileDreheRunter(boolean geheInNächsteZeile)
// {
// fahreBisHuegel();
// fahreUmHuegel("Runter");
// fahreBisHuegel();
// drehe("um");
fahreBisHuegel();
fahreUmHuegel("Hoch");
fahreBisHuegel();
if(geheInNächsteZeile) {
drehe("rechts");
fahre();
drehe("rechts");
} else {
drehe("um");
}
}
// fahreBisHuegel();
// fahreUmHuegel("Hoch");
// fahreBisHuegel();
// if(geheInNächsteZeile) {
// drehe("rechts");
// fahre();
// drehe("rechts");
// } else {
// drehe("um");
// }
// }
private void S66Nr3(int anzahlZeilen)
{
if(anzahlZeilen < 3) {
nachricht("Ich muss mindestens drei Zeilen fahren! :(");
return;
}
int i = 1;
fahreZeileDreheHoch();
for(; i < anzahlZeilen-1; i++) {
fahreZeileDreheRunter(true);
}
fahreZeileDreheRunter(false);
}
// private void S66Nr3(int anzahlZeilen)
// {
// if(anzahlZeilen < 3) {
// nachricht("Ich muss mindestens drei Zeilen fahren! :(");
// return;
// }
// int i = 1;
// fahreZeileDreheHoch();
// for(; i < anzahlZeilen-1; i++) {
// fahreZeileDreheRunter(true);
// }
// fahreZeileDreheRunter(false);
// }
/**
* Der Rover bewegt sich ein Feld in Fahrtrichtung weiter.
* Sollte sich in Fahrtrichtung ein Objekt der Klasse Huegel befinden oder er sich an der Grenze der Welt befinden,
* dann erscheint eine entsprechende Meldung auf dem Display.
*/
public void fahre()
{
int posX = getX();
int posY = getY();
// /**
// * Der Rover bewegt sich ein Feld in Fahrtrichtung weiter.
// * Sollte sich in Fahrtrichtung ein Objekt der Klasse Huegel befinden oder er sich an der Grenze der Welt befinden,
// * dann erscheint eine entsprechende Meldung auf dem Display.
// */
// public void fahre()
// {
// int posX = getX();
// int posY = getY();
if(huegelVorhanden("vorne"))
{
nachricht("Zu steil!");
}
else if(getRotation()==270 && getY()==1)
{
nachricht("Ich kann mich nicht bewegen");
}
else
{
move(1);
Greenfoot.delay(1);
}
// if(huegelVorhanden("vorne"))
// {
// nachricht("Zu steil!");
// }
// else if(getRotation()==270 && getY()==1)
// {
// nachricht("Ich kann mich nicht bewegen");
// }
// else
// {
// move(1);
// Greenfoot.delay(1);
// }
if(posX==getX()&&posY==getY()&&!huegelVorhanden("vorne"))
{
nachricht("Ich kann mich nicht bewegen");
}
}
// if(posX==getX()&&posY==getY()&&!huegelVorhanden("vorne"))
// {
// nachricht("Ich kann mich nicht bewegen");
// }
// }
/**
* Der Rover dreht sich um 90 Grad in die Richtung, die mit richtung (ᅵlinksᅵ oder ᅵrechtsᅵ) ᅵbergeben wurde.
* Sollte ein anderer Text (String) als "rechts" oder "links" ᅵbergeben werden, dann erscheint eine entsprechende Meldung auf dem Display.
*/
public void drehe(String richtung)
{
if(richtung.equals("rechts")){
setRotation(getRotation()+90);
}else if(richtung.equals("links")){
setRotation(getRotation()-90);
} else if(richtung.equals("um")) {
setRotation(getRotation()+180);
}else {
nachricht("Keinen Korrekte Richtung gegeben!");
}
}
// /**
// * Der Rover dreht sich um 90 Grad in die Richtung, die mit richtung (ᅵlinksᅵ oder ᅵrechtsᅵ) ᅵbergeben wurde.
// * Sollte ein anderer Text (String) als "rechts" oder "links" ᅵbergeben werden, dann erscheint eine entsprechende Meldung auf dem Display.
// */
// public void drehe(String richtung)
// {
// if(richtung.equals("rechts")){
// setRotation(getRotation()+90);
// }else if(richtung.equals("links")){
// setRotation(getRotation()-90);
// } else if(richtung.equals("um")) {
// setRotation(getRotation()+180);
// }else {
// nachricht("Keinen Korrekte Richtung gegeben!");
// }
// }
/**
* Der Rover gibt durch einen Wahrheitswert (true oder false )zurᅵck, ob sich auf seiner Position ein Objekt der Klasse Gestein befindet.
* Eine entsprechende Meldung erscheint auch auf dem Display.
*/
public boolean gesteinVorhanden()
{
if(getOneIntersectingObject(Gestein.class)!=null)
{
nachricht("Gestein gefunden!");
return true;
// /**
// * Der Rover gibt durch einen Wahrheitswert (true oder false )zurᅵck, ob sich auf seiner Position ein Objekt der Klasse Gestein befindet.
// * Eine entsprechende Meldung erscheint auch auf dem Display.
// */
// public boolean gesteinVorhanden()
// {
// if(getOneIntersectingObject(Gestein.class)!=null)
// {
// nachricht("Gestein gefunden!");
// return true;
}
// }
return false;
}
// return false;
// }
/**
* Der Rover ᅵberprᅵft, ob sich in richtung ("rechts", "links", oder "vorne") ein Objekt der Klasse Huegel befindet.
* Das Ergebnis wird auf dem Display angezeigt.
* Sollte ein anderer Text (String) als "rechts", "links" oder "vorne" ᅵbergeben werden, dann erscheint eine entsprechende Meldung auf dem Display.
*/
public boolean huegelVorhanden(String richtung)
{
int rot = getRotation();
// /**
// * Der Rover ᅵberprᅵft, ob sich in richtung ("rechts", "links", oder "vorne") ein Objekt der Klasse Huegel befindet.
// * Das Ergebnis wird auf dem Display angezeigt.
// * Sollte ein anderer Text (String) als "rechts", "links" oder "vorne" ᅵbergeben werden, dann erscheint eine entsprechende Meldung auf dem Display.
// */
// public boolean huegelVorhanden(String richtung)
// {
// int rot = getRotation();
if (richtung=="vorne" && rot==0 || richtung=="rechts" && rot==270 || richtung=="links" && rot==90)
{
if(getOneObjectAtOffset(1,0,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(1,0,Huegel.class)).getSteigung() >30)
{
return true;
}
}
// if (richtung=="vorne" && rot==0 || richtung=="rechts" && rot==270 || richtung=="links" && rot==90)
// {
// if(getOneObjectAtOffset(1,0,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(1,0,Huegel.class)).getSteigung() >30)
// {
// return true;
// }
// }
if (richtung=="vorne" && rot==180 || richtung=="rechts" && rot==90 || richtung=="links" && rot==270)
{
if(getOneObjectAtOffset(-1,0,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(-1,0,Huegel.class)).getSteigung() >30)
{
return true;
}
}
// if (richtung=="vorne" && rot==180 || richtung=="rechts" && rot==90 || richtung=="links" && rot==270)
// {
// if(getOneObjectAtOffset(-1,0,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(-1,0,Huegel.class)).getSteigung() >30)
// {
// return true;
// }
// }
if (richtung=="vorne" && rot==90 || richtung=="rechts" && rot==0 || richtung=="links" && rot==180)
{
if(getOneObjectAtOffset(0,1,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(0,1,Huegel.class)).getSteigung() >30)
{
return true;
}
// if (richtung=="vorne" && rot==90 || richtung=="rechts" && rot==0 || richtung=="links" && rot==180)
// {
// if(getOneObjectAtOffset(0,1,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(0,1,Huegel.class)).getSteigung() >30)
// {
// return true;
// }
}
// }
if (richtung=="vorne" && rot==270 || richtung=="rechts" && rot==180 || richtung=="links" && rot==0)
{
if(getOneObjectAtOffset(0,-1,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(0,-1,Huegel.class)).getSteigung() >30)
{
return true;
}
// if (richtung=="vorne" && rot==270 || richtung=="rechts" && rot==180 || richtung=="links" && rot==0)
// {
// if(getOneObjectAtOffset(0,-1,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(0,-1,Huegel.class)).getSteigung() >30)
// {
// return true;
// }
}
// }
if(richtung!="vorne" && richtung!="links" && richtung!="rechts")
{
nachricht("Befehl nicht korrekt!");
}
// if(richtung!="vorne" && richtung!="links" && richtung!="rechts")
// {
// nachricht("Befehl nicht korrekt!");
// }
return false;
}
// return false;
// }
/**
* Der Rover ermittelt den Wassergehalt des Gesteins auf seiner Position und gibt diesen auf dem Display aus.
* Sollte kein Objekt der Klasse Gestein vorhanden sein, dann erscheint eine entsprechende Meldung auf dem Display.
*/
public void analysiereGestein()
{
if(gesteinVorhanden())
{
nachricht("Gestein untersucht! Wassergehalt ist " + ((Gestein)getOneIntersectingObject(Gestein.class)).getWassergehalt()+"%.");
Greenfoot.delay(1);
removeTouching(Gestein.class);
}
else
{
nachricht("Hier ist kein Gestein");
}
}
// /**
// * Der Rover ermittelt den Wassergehalt des Gesteins auf seiner Position und gibt diesen auf dem Display aus.
// * Sollte kein Objekt der Klasse Gestein vorhanden sein, dann erscheint eine entsprechende Meldung auf dem Display.
// */
// public void analysiereGestein()
// {
// if(gesteinVorhanden())
// {
// nachricht("Gestein untersucht! Wassergehalt ist " + ((Gestein)getOneIntersectingObject(Gestein.class)).getWassergehalt()+"%.");
// Greenfoot.delay(1);
// removeTouching(Gestein.class);
// }
// else
// {
// nachricht("Hier ist kein Gestein");
// }
// }
/**
* Der Rover erzeugt ein Objekt der Klasse ᅵMarkierungᅵ auf seiner Position.
*/
public void setzeMarke()
{
getWorld().addObject(new Marke(), getX(), getY());
}
// /**
// * Der Rover erzeugt ein Objekt der Klasse ᅵMarkierungᅵ auf seiner Position.
// */
// public void setzeMarke()
// {
// getWorld().addObject(new Marke(), getX(), getY());
// }
/**
* *Der Rover gibt durch einen Wahrheitswert (true oder false )zurᅵck, ob sich auf seiner Position ein Objekt der Marke befindet.
* Eine entsprechende Meldung erscheint auch auf dem Display.
*/
public boolean markeVorhanden()
{
if(getOneIntersectingObject(Marke.class)!=null)
{
return true;
}
// /**
// * *Der Rover gibt durch einen Wahrheitswert (true oder false )zurᅵck, ob sich auf seiner Position ein Objekt der Marke befindet.
// * Eine entsprechende Meldung erscheint auch auf dem Display.
// */
// public boolean markeVorhanden()
// {
// if(getOneIntersectingObject(Marke.class)!=null)
// {
// return true;
// }
return false;
}
// return false;
// }
public void entferneMarke()
{
if(markeVorhanden())
{
removeTouching(Marke.class);
}
}
// public void entferneMarke()
// {
// if(markeVorhanden())
// {
// removeTouching(Marke.class);
// }
// }
private void nachricht(String pText)
{
if(anzeige!=null)
{
anzeige.anzeigen(pText);
Greenfoot.delay(1);
anzeige.loeschen();
}
}
// private void nachricht(String pText)
// {
// if(anzeige!=null)
// {
// anzeige.anzeigen(pText);
// Greenfoot.delay(1);
// anzeige.loeschen();
// }
// }
private void displayAusschalten()
{
getWorld().removeObject(anzeige);
// private void displayAusschalten()
// {
// getWorld().removeObject(anzeige);
}
// }
protected void addedToWorld(World world)
{
setImage("images/rover.png");
world = getWorld();
anzeige = new Display();
anzeige.setImage("images/nachricht.png");
world.addObject(anzeige, 7, 0);
if(getY()==0)
{
setLocation(getX(),1);
}
anzeige.anzeigen("Ich bin bereit");
}
// protected void addedToWorld(World world)
// {
// setImage("images/rover.png");
// world = getWorld();
// anzeige = new Display();
// anzeige.setImage("images/nachricht.png");
// world.addObject(anzeige, 7, 0);
// if(getY()==0)
// {
// setLocation(getX(),1);
// }
// anzeige.anzeigen("Ich bin bereit");
// }
class Display extends Actor
{
GreenfootImage bild;
// class Display extends Actor
// {
// GreenfootImage bild;
public Display()
{
bild = getImage();
}
// public Display()
// {
// bild = getImage();
// }
public void act()
{
// public void act()
// {
}
// }
public void anzeigen(String pText)
{
loeschen();
getImage().drawImage(new GreenfootImage(pText, 25, Color.BLACK, new Color(0, 0, 0, 0)),10,10);
// public void anzeigen(String pText)
// {
// loeschen();
// getImage().drawImage(new GreenfootImage(pText, 25, Color.BLACK, new Color(0, 0, 0, 0)),10,10);
}
// }
public void loeschen()
{
getImage().clear();
setImage("images/nachricht.png");
}
// public void loeschen()
// {
// getImage().clear();
// setImage("images/nachricht.png");
// }
}
// }
public class Direction {
Direction(int val){
this.value = val;
}
final int value;
};
}
// public class Direction {
// Direction(int val){
// this.value = val;
// }
// final int value;
// };
// }
void function() {
print(12);
}