我正在编写一个解析器,我正在研究匹配不同的令牌,我在匹配方面遇到了一些麻烦。 我有一个测试文件:
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不匹配。
此外,如果有人可以帮助我使用匹配运算符的正则表达式,那将是很棒的。我尝试了很多这样的事情:
[\+\-\*\\]
[\\+\\-\\*\\\]
[+][-][*][/]
但似乎无法做到正确。
答案 0 :(得分:0)
扫描程序可能包含一个不可打印(换行符)字符作为令牌的一部分。
试试这个:
private static Pattern tokenPattern = Pattern.compile("[ \r\n\t]+");
对于运营商,请尝试以下方法:
[<>+-/*=:]+