Also, ich muss einen Lexical Analyzer für Python in Java machen, alles funktioniert grundsätzlich, aber ich finde keine Möglichkeit, Kommentarzeilen mit Regex-Ausdrücken zu ignorieren. Ich habe mit Arraylisten reserviert Worten Betriebs Zeichen, Vergleichszeichen usw. Das ist, was ich habe, so weit:Lexikalischer Analysator für Python - Ignoriere Kommentarzeile
int encontrouLista = 0;
token = token.replaceAll("[#](.)*","");
if (token.contains(" ")){
write.println("espaço em branco");
token = token.replaceAll("\\s+", "");
}
else if (token.contains("\n")){
write.println("quebra de linha");
token = token.replaceAll("\\r\\n|\\r|\\n", "");
}
for (Entry<String, ArrayList> entry : listas.entrySet()) {
if (encontrouLista==1) break;
if (token.length() > 0 && entry.getValue().contains(token)) {
write.println(token + " pertence a " + entry.getKey());
encontrouLista = 1;
}
}
if (encontrouLista == 0 && !token.matches("^\\s*$")) {
if (token.matches("[A-Za-z]+[0-9A-Za-z_]*")) {
write.println(token + " identificador");
encontrouLista = 1;
} else if (token.matches("[0-9]+")) {
write.println(token + " numérico inteiro");
encontrouLista = 1;
} else if (token.matches("[0-9]+[.][0-9]+")) {
write.println(token + " numérico real");
encontrouLista = 1;
} else {
write.println(token + " não reconhecido");
}
}
Ich habe versucht, diese Linie zu verwenden, um die Kommentarzeilen zu ignorieren:
token = token.replaceAll("[#](.)*","");
Aber ich denke, dass aus diesem Grunde „wenn“ der Code den Kommentar als „identificador“ erwägt, anstatt sie zu ignorieren:
if (token.matches("[A-Za-z]+[0-9A-Za-z_]*")) {
write.println(token + " identificador");
encontrouLista = 1;
}
Bin ich den richtigen regulären Ausdruck verwenden? Außerdem muss ich einen Weg finden, Dinge innerhalb des "" für Drucke zu definieren.
Wenn ich dieses # [^ \ n] * \ n $ das "#" geht an die "não reconhecido" andere (nicht erkannt) und der Kommentar geht an das if bezieht sich auf den "identificador". –