所以,我必须用Java做一个Python的Lexical Analyzer,一切都基本正常,但我似乎无法找到一种方法来忽略使用正则表达式的注释行。我创建了具有保留字,操作符号,比较符号等的ArrayLists。这是我到目前为止所做的:
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");
}
}
我尝试使用此行忽略注释行:
token = token.replaceAll("[#](.)*","");
但我认为因为这个“如果”代码将评论视为“识别者”而不是忽略它:
if (token.matches("[A-Za-z]+[0-9A-Za-z_]*")) {
write.println(token + " identificador");
encontrouLista = 1;
}
我使用正确的正则表达式吗?另外,我需要找到一种方法来定义“”中的内容用于打印。