0

我正在使用 Java 实现一个词法分析器。在“String palavras_reservadas”里面,我有所有不能用来命名变量之类的保留字。Matcher 负责在我的输入代码中查找那些保留字。我将输入代码中的所有行放在名为“vetor1”的 ArrayList 的不同位置。当我找到一个保留字时,我想拆分这个“vetor1”。例如,我有这个代码作为我的输入:

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;

(或类似的东西)。我可以使用 split 来做到这一点吗?

这是我到目前为止所拥有的:

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

要使用 split 你应该有一个 char 来分割序列,例如 "if!(a>b)".split("!") 给你 "if" 和 "(a>b)",那么情况并非如此我耽心

于 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 回答