0

Javaを使用して字句解析器を実装しています。「String palavras_reservadas」の中には、変数の名前付けなどに使用できないすべての予約語があります。マッチャーは、入力コード内の予約語を見つける責任があります。入力コードのすべての行を、「vetor1」という ArrayList の別の位置に配置しました。この「vetor1」は、予約語が 1 つ見つかった時点で分割したいと考えています。たとえば、入力として次のコードがあります。

a = b + c;
if (a > b)
c = c + b;

私のコードは、各行を配列の異なる位置に配置します。

v[0] = a = b + c;
v[1] = if (a > b)
v[2] = c = c + b;

そして、私がやりたいことは次のとおりです。

v[0] = a = b + c;
v[1] = if 
v[2] = (a > b)
v[3] = c = c + b;

(またはそのようなもの)。これを行うために分割を使用できますか?

これは私がこれまでに持っているものです:

public class AnalisadorLexico { 
     public static void main(String args[]) throws FileNotFoundException {

         List<String> vetor1 = new ArrayList<String>();
         File text = new File("/Users/Mvaguimaraes/Desktop/codigo.marcos");
         Scanner scnr = new Scanner(text);

         String palavras_reservadas = "fim-se|enquanto|então|se|senão|para|de|até|faça|fim-para|fim-enquanto";
         Pattern r = Pattern.compile(palavras_reservadas);
         int i = 0;
            while(scnr.hasNextLine())
            {

                String line = scnr.nextLine();
                vetor1.add(line);
                Matcher m = r.matcher(scnr.nextLine());
                if (m.find( )) {
                   System.out.println("Found value: " + m.group());

                }

            }  

                for(i = 0; i<vetor1.size(); i++)
                {
                        String value = vetor1.get(i);
                        System.out.println(value);
                }


        }  
}
4

2 に答える 2

0

分割を使用するには、シーケンスを分割するための char が必要です。私は怖いです

于 2015-03-24T22:08:14.903 に答える
0

Patternたとえば、クラスを使用できると思います

Pattern p = Pattern.compile("(if) ([(].*[)])\n"));
Matcher matcher = p.matcher("if (a>b)");
if (matcher.matches()) {
  matcher.group(1); // "if"
  matcher.group(2); // "(a>b)"
}

基本的に、各括弧のペアの内容は group(k) メソッドでキャプチャできます。ここで、k は左から k 番目の括弧のペアです。詳細については、https ://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html を参照してください。

于 2015-03-24T22:38:38.223 に答える