Я хотел бы создать реализацию синтаксического анализа рекурсивного спуска для нотации игры в кости с использованием java Scanner, если это возможно . Ранее я открывал вопрос об этом , но мне казалось, что мои требования слишком упрощены. Итак, я представляю здесь запрос во всей его глобальности.
Очень надеюсь, что это реализуемо с классом java.util.Scanner, но при необходимости напишу свой сканер. Я хотел бы избежать этого прямо сейчас.
expression = { whitespace } , [ plusminus ] , roll , { plusminus , ( roll | number , { whitespace } ) } ;
roll = [ number ] , ( "d" | "D" ) , ( number | "%") , [ "-" ( "L" | "H" ) ] , { whitespace } ;
plusminus = ( "+" | "-" ) , { whitespace } ;
number = nonzerodigit , { digit } ;
digit = nonzero digit | "0" ;
nonzerodigit = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
whitespace = ? Java definition of a whitespace ? ;
Итак, я попытался написать следующий код:
Scanner s = new Scanner("1d6");
if (s.hasNextInt()) {
s.nextInt();
} else {
throw new java.text.ParseException();
}
Но очевидно, что он продолжает терпеть неудачу.
Также, как было предложено в предыдущем вопросе, я пробовал методы findWithinHorizon, но он действительно находит следующий шаблон и не проверяет, где я нахожусь. Поэтому я не могу "оттолкнуть" строку, если это не то, что мне нужно...
Так что любое предложение о том, как я должен использовать java.util.Scanner в этом контексте? Или, может быть, мне нужно написать свой собственный сканер?