我正在编写一个解析器,我目前正在匹配不同的标记,但我在匹配时遇到了一些麻烦。我有一个测试文件:
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 不匹配。
另外,如果有人可以帮助我使用匹配运算符的正则表达式,那就太好了。我已经尝试了很多这样的变化:
[\+\-\*\\]
[\\+\\-\\*\\\]
[+][-][*][/]
但似乎无法正确处理。