Python的词法分析器忽略注释lin

2024-07-05 08:09:22 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我必须在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;
        }

我使用的正则表达式正确吗?另外,我需要找到一种方法来定义“”中的打印内容。


Tags: 方法tokenif符号elsenumwriteentry