주어진 문자열 java.util.regex.Pattern
에 의해 첫 번째 문자으로 일치 할 수있는 모든 문자 집합을 문자열로 계산할 수 있기를 원합니다. 보다 공식적으로 DFA가 특정 정규식과 동일한 경우 시작 상태에서 나가는 모든 전환 집합을 원합니다.정규식 패턴과 일치하는 첫 번째 문자 집합을 결정할 수 있습니까?
예 :
Pattern p = Pattern.compile("[abc]def|daniel|chris|\\s+");
Set<Character> first = getFirstSet(p);
first
는 다음과 같은 요소가 포함되어야 세트 :
{ 'a', 'b', 'c', 'd', ' ', '\n', '\r', '\t' }
어떤 아이디어? 나는 DFA를 직접 만들 수 있고 그런 식으로 관련 상태를 결정할 수 있다는 것을 잘 알고 있습니다. 그러나 그런 종류의 번거 로움을 피하고 싶습니다. (읽기 : 그만한 가치는 없습니다.) 내 호스트 언어는 실제로 스칼라이므로 모든 스칼라 라이브러리에 액세스 할 수있다.
그래, 나는 그것에 대해 생각했다. 이는 DFA의 프런트 엔드를 직접 제작하는 것과 실질적으로 동일합니다.어쩌면 내가이 일을 할 수는 있지만, 좀 더 간단한 해결책을 찾고 싶다. –
(언어 표준의 고정 문법에 따라) 파싱하는 것보다 얼마나 단순 해지는 지 잘 모르겠지만 어쩌면 그건 내 컴파일러가 뇌에 주입 된 것일 수도 있습니다. – Tetha
글쎄, 파싱하고 순회 트래버스 aren 너무 나쁘다. 나는 단지 FIRST를 얻기 위해 자바의 정규식 의미를 복제하는 것에 만족하지 않는다. –