2016-03-29 17 views
0

Python用のレキシカルアナライザをJavaで実行する必要がありますが、基本的にはすべて動作しますが、正規表現を使用してコメント行を無視する方法は見つけられません。Python用字句解析ツール - コメント行を無視する

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("[#](.)*",""); 

をしかし、私はこれは私がこれまで持っているものであるなどの予約語、運転看板、比較兆し、とのArrayListを作成しました

 if (token.matches("[A-Za-z]+[0-9A-Za-z_]*")) { 
      write.println(token + " identificador"); 
      encontrouLista = 1; 
     } 

は、私が正しい正規表現式を使用しています:私はこれのために、「場合」のコードがそれを無視するのではなく、「identificador」などのコメントを検討していることと思いますか?また、私はプリントのために ""内部に物を定義する方法を見つける必要があります。ここで

答えて

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

がある作業DEMO

+0

私は* \ nはこの#1 [^ \ n]を使用する場合は$ "#" は、他の(認識されない) "NAOのreconhecido" に行くとコメントへ行きます"identificador"を指す場合。 –

関連する問題