所以,我必须在Java中为Python做一个词法分析器,一切基本上都在工作,但是我似乎找不到一种方法来忽略使用regex表达式的注释行。我用保留字、操作符号、比较符号等创建了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");
}
}
我试图用这一行忽略评论行:
^{pr2}$但我认为,由于这个“if”,代码将注释视为“identificador”,而不是忽略它:
if (token.matches("[A-Za-z]+[0-9A-Za-z_]*")) {
write.println(token + " identificador");
encontrouLista = 1;
}
我使用的正则表达式正确吗?另外,我需要找到一种方法来定义“”中的打印内容。
这是工作DEMO
相关问题 更多 >
编程相关推荐