Я пытаюсь перевести предложение «b ((aa) a) b $« используя грамматику, показанную в комментарии к коду. Когда я пытаюсь запустить его, он дает следующую ошибку. Кажется, что это ошибка в методе разделения строк, но я не знаю, как это исправить. Любые предложения? Спасибо.Исключение в теме «main» java.util.regex.PatternSyntaxException: Непревзойденное закрытие
пробег:
б ((а) а) б $
Исключение в потоке "основной" java.util.regex.PatternSyntaxException: Непревзойденная закрытие ')' рядом с индексом 3
)
^ в java.util.regex.Pattern.error (Pattern.java:1955) на java.util.regex.Pattern.compile (Pattern.java:1700) в Явь a.util.regex.Pattern. (Pattern.java:1351) на java.util.regex.Pattern.compile (Pattern.java:1028) на java.lang.String.split (String.java:2367) в exercise3.GrammarTest.parser (GrammarTest.java:28) в exercise3.GrammarTest.parser (GrammarTest.java:48) в exercise3.GrammarTest.main (GrammarTest.java:62)
Java Результат: 1
строить успешные (общее время: 1 секунда)
//grammar
//<P> → <S>$ (P is the start symbol)
//<S> → b<M>b
//<M> → (<L>
//<M> → a
//<L> → <M> a)
public static String parser(String original, String sym, String rep){
if(!(original.contains(sym))){
return original;
}
String str = "";
String [] parts = original.split(sym, 2);
str = parts[0] + rep + parts[1];
System.out.println(str);
return str;
}
public static String parser(String str){
String [] sym = new String[5];
//recursive //b((aa)a)b$
str = parser(str, "a", "<M>"); //b((<M>a)a)b$
str = parser(str, "<M>a)", "<L>"); //b((<L>a)b$
str = parser(str, "(<L>", "<M>"); //b(<M>a)b$
str = parser(str, "<M>a)", "<L>"); //b(<L>b$
str = parser(str, "(<L>", "<M>"); //b<M>b$
str = parser(str, "b<M>b", "<S>"); //<S>$
str = parser(str, "<S>$", "<P>"); //<P>
System.out.println(str);
return str;
}
public static void main(String[] args) {
String str = " b((aa)a)b$ ";
str = parser(str);
}