用于Python的词法分析器 - 忽略注释行

时间:2016-03-29 23:25:44

标签: java python regex lexical

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

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

1 个答案:

答案 0 :(得分:0)

(#[^\n]*\n$)

这是工作DEMO