2016-03-29 6 views
0

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.

Antwort

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

Hier ist die Arbeits DEMO

+0

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". –

Verwandte Themen