簡體   English   中英

Java解析器和正則表達式

[英]Java parser and regex

我正在編寫一個解析器,目前正在研究匹配不同的令牌,並且在匹配方面有些麻煩。 我有一個測試文件:

while a != b
  if a > b
    a := a - b
  if a <= b
    b := b - a
elihw

而我的代碼的一部分:

private static Scanner sc = new Scanner(System.in);
private static Pattern tokenPattern = Pattern.compile("[ ]+");
private static Pattern idPattern = Pattern.compile("[a-zA-Z]+");

....main(...) {
      sc.useDelimiter(tokenPattern);
      statement();
    }

public static void statement() {
    System.out.println("Statement");
    String token = null;
    while (sc.hasNext()) {
        if (sc.hasNext(idPattern)) {
            token = sc.next();
            System.out.print(" (" + token + ") ");
        }
        else {
            token = sc.next();
            System.out.print(token + ' ');
        }
    }
}

當我運行此方法時,它匹配運算符之前的字符串,但不匹配運算符之后的字符串。 父母在這里只是為了標記它匹配的人。 例如,線

a := a - b

將產生輸出:

(a) := (a) - b

我不知道為什么b不匹配。

另外,如果有人可以通過匹配運算符的正則表達式來幫助我,那將是很棒的。 我已經嘗試過許多類似的方法:

[\+\-\*\\]
[\\+\\-\\*\\\]
[+][-][*][/]

但似乎無法做到正確。

掃描程序可能包含不可打印的(換行符)字符作為令牌的一部分。

嘗試這個:

private static Pattern tokenPattern = Pattern.compile("[ \r\n\t]+");

對於運營商,請嘗試以下操作:

[<>+-/*=:]+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM