[英]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.