가능한 경우 Java 스캐너를 사용하여 dice notation의 구현을 파싱하는 재귀 적 파생을 작성하고 싶습니다. 이전에 a question about it을 열어 보았습니다.하지만 요구 사항이 너무 단순 해 보였습니다. 그래서 저는 여기에 그 요구를 전 세계에서 제시 할 것입니다.주사위 표기법 (재귀 적 하강 파싱 구현) : 구분 기호가없는 스캐너
정말 java.util.Scanner 클래스와 함께 사용하면 좋겠지 만, 필요한 경우 내 자신의 스캐너를 작성합니다. 나는 지금 이것을 피하고 싶습니다.
Scanner s = new Scanner("1d6");
if (s.hasNextInt()) {
s.nextInt();
} else {
throw new java.text.ParseException();
}
을하지만, 분명히 그것은 실패 유지 :
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 ? ;
그래서 사실
, 나는 다음과 같은 코드를 작성하려고했습니다.이전 질문에서 제안한대로 findWithinHorizon 메서드를 시도했지만 실제로 다음 패턴을 찾고 내가 어디에 있는지 확인하지 않습니다. 그래서 내가 필요로하지 않는 경우 문자열을 "푸시 백"할 수 없습니다 ...
그래서이 컨텍스트에서 java.util.Scanner를 사용해야하는 방법에 대한 제안은 무엇입니까? 또는 내 자신의 스캐너를 작성해야합니까?
JParsec에 대한 정보를 제공해 주셔서 감사합니다. 나는 그 디자인을 사용할 것이라고 생각합니다. 너무 많은 시간이 걸리면 저는 도서관 자체를 사용할 것입니다. 그러나 왜 스캐너를 사용하지 말아야하는지 설명 할 수 있습니까? 더 나은 대안 (예 : JParsec) 또는 다른 이유가 있기 때문에 그것이 목적이 아니기 때문입니까? –
당신의 문법은이 스캐너가 설계 한 것과 너무 다릅니다. –
감사합니다. 대단히 감사합니다! –