Hallo,
ich habe mal wieder ein Problem. Ich bin gerade dabei einen kleinen Parser zu schreiben, nur dieser soll die Kommentare weglassen und überprüfen ob auch alles richtig ist und den Rest danach weiter bearbeiten. Nun zu meinem Problem:
1. Jedes mal wenn die Datei eingelesen wird kommt der Inhalt nacher in komischer Form wieder raus.
2. Wie überprüfe ich, ob es zu jeder geöffneten Klammer auch eine geschlossene gibt und ob hinter jeder Anweisung (alles was keine geöffnete Klammer besitzt und kein Kommentar ist) ein Semikolon ist? (Eine Anweisung kann auch mehrere Zeilen lang sein...)
Also hier mein bisheriger Code:
Die Datei selbst:
Und zum Schluss der momentanige output, der ein wenig falsch ist (so sieht jede Zeile vom output aus, darum hier nur eine Zeile):
Würde man jetzt den Output so haben wie er fast sein sollte:
Ich denke mal jedem ist aufgefallen das hier mehr Kommans als vorher drinnen sind und das die eckigen Klammern da auch nicht hingehören. Ob dort etwas fehlt habe ich jetzt aber nicht geprüft, da ich das dafür erstmal wieder so schön lesbar haben möchte wie vorher...
Und zudem soll ja Teil zwei des Problems überprüfen ob alles da ist und richtig ist. (Schade dass es hier im Forum anscheinend keine Spoiler mehr gibt...)
Ich hoffe jemand kann mir hierbei helfen.
JavaGamer
ich habe mal wieder ein Problem. Ich bin gerade dabei einen kleinen Parser zu schreiben, nur dieser soll die Kommentare weglassen und überprüfen ob auch alles richtig ist und den Rest danach weiter bearbeiten. Nun zu meinem Problem:
1. Jedes mal wenn die Datei eingelesen wird kommt der Inhalt nacher in komischer Form wieder raus.
2. Wie überprüfe ich, ob es zu jeder geöffneten Klammer auch eine geschlossene gibt und ob hinter jeder Anweisung (alles was keine geöffnete Klammer besitzt und kein Kommentar ist) ein Semikolon ist? (Eine Anweisung kann auch mehrere Zeilen lang sein...)
Also hier mein bisheriger Code:
Java:
public static void checkFile(File file) throws IOException
{
loadFile(file);
List<String> contents = new ArrayList<String>();
/*Files.lines(file.toPath())
.map(s -> s.trim())
.filter(s -> !s.isEmpty())
.forEach(s -> lines.add(s));*/
List<String> lines = Files.lines(file.toPath())
.map(s -> s.trim())
.filter(s -> !s.isEmpty())
.collect(Collectors.toList());
for(int i = 0; i < lines.size(); i++)
{
String check = lines.get(i);
if(check.contains("//"))
{
int position = check.indexOf("//");
//String result = check.substring(position, check.length());
String result = check.substring(0, position);
contents.add(result);
}
else
contents.add(check);
}
for(int i = 0; i < contents.size(); i++)
{
System.out.println(contents.toString());
}
}
Die Datei selbst:
Code:
include <platformer_v1>
class story_level_1.shd
{
init()
{
game:s_level=1; // the png and shd file of the level
x:start = 1; // the start point to load from
x:end = 49; // the end point to load
x:spawn=3; // the spawn point
x:portal=47; // the portal point
y:start = 1;
y:end = 22;
y:spawn=3;
y:portal=10;
}
tick()
{
if(player == portal)
level++;
if(player == from 'x:start' to 'x:end')
level;
if(player == from 'y:start' to 'y:end')
level;
if(player == (from 'y:end' & 'x:start' to 'y:end' & 'x:end'))
level;
if(player == (from 'x:end' & 'y:start' to 'x:end' & 'y:end'))
level;
}
render()
{
game:color_dirt=255,0,0;
game:color_bedrock=127,0,0;
game:color_background=0,0,0;
}
}
Und zum Schluss der momentanige output, der ein wenig falsch ist (so sieht jede Zeile vom output aus, darum hier nur eine Zeile):
Code:
[include <platformer_v1>, class story_level_1.shd, {, init(), {, game:s_level=1; , x:start = 1; , x:end = 49; , x:spawn=3; , x:portal=47; , y:start = 1;, y:end = 22;, y:spawn=3;, y:portal=10;, }, tick(), {, if(player == portal), level++;, if(player == from 'x:start' to 'x:end'), level;, if(player == from 'y:start' to 'y:end'), level;, if(player == (from 'y:end' & 'x:start' to 'y:end' & 'x:end')), level;, if(player == (from 'x:end' & 'y:start' to 'x:end' & 'y:end')), level;, }, render(), {, game:color_dirt=255,0,0;, game:color_bedrock=127,0,0;, game:color_background=0,0,0;, }, }]
Würde man jetzt den Output so haben wie er fast sein sollte:
Code:
[include <platformer_v1>,
class story_level_1.shd,
{,
init(),
{,
game:s_level=1;
, x:start = 1;
, x:end = 49;
, x:spawn=3;
, x:portal=47;
, y:start = 1;
, y:end = 22;
, y:spawn=3;
, y:portal=10;
,
},
tick(),
{,
if(player == portal),
level++;,
if(player == from 'x:start' to 'x:end'),
level;,
if(player == from 'y:start' to 'y:end'),
level;,
if(player == (from 'y:end' & 'x:start' to 'y:end' & 'x:end')),
level;,
if(player == (from 'x:end' & 'y:start' to 'x:end' & 'y:end')),
level;,
},
render(),
{,
game:color_dirt=255,0,0;
, game:color_bedrock=127,0,0;
, game:color_background=0,0,0;
, }
, }]
Und zudem soll ja Teil zwei des Problems überprüfen ob alles da ist und richtig ist. (Schade dass es hier im Forum anscheinend keine Spoiler mehr gibt...)
Ich hoffe jemand kann mir hierbei helfen.
JavaGamer
Zuletzt bearbeitet: