2011-10-14 2 views
2

나는 NFA를 디자인하고 JFLAP을 사용하여 시나리오를 DFA로 변환했다.NFA/DFA를 java로 변환하는 방법?

Java에서 코드를 작성하는 방법을 알아야합니까?

기본적으로 이러한 상태 전이를 Java로 구현하는 방법. switch 및 if 문을 사용하여이 작업을 수행하는 몇 가지 예제를 보았지만 DFA/NFA 디자인과 Java에서 구현하는 데 사용하는 방법을 전혀 볼 수 없습니다.

+0

가능한 복제본 : http://stackoverflow.com/q/1340374/161640 – Isaac

+1

@Isaac : 귀하의 링크는이 질문과 관련이 없으며이 질문은 "NFA to DFA"가 아니라 "NFA/DFA to Java " – deepmax

+0

@Isaac : NFA를 DFA로 변환하는 방법에 대해 감사합니다. –

답변

4

당신이 동안 (사실) 스위치 (상태 이상 더 객체 지향 설계를 사용하려는 경우의 수) {...}

public class State{ 
    private Map<Character,State> transitions=new HashMap<Character,State>(); 

    public void addTransition(char ch,State st){ 
     transitions.put(ch,st); 
    } 

    public State next(char ch){ 
     return transitions.get(ch); 
    } 

    private boolean fin=false; 
    public boolean isFinal(){return fin;} 
    public boolean setFinal(boolean f){fin=f;}   


} 

당신은 지금 그것을 구현 한 것이지만, 소화하기 쉽고 아주 좋은 구현이 있지만 다음 루프는

State currState=startState; 
while(currState!=null && input.hasNextChar()){//you can also end directly when final state is reached 
    char next = input.nextChar();//get next character 
    currState = currState.next(next); 
} 

if(currState!=null && currState.isFinal()){ 
    // reached final state 
}else{ 
    // to bad didn't match 
} 
+0

DFA를 지시 그래프의 일종으로 모델링 할 수 있습니까? 텍스트 서적에 대한 DFAS의 표현과 같은 상태 전이를 생성하는 문자에 대한 정보를 포함하는 노드 사이의 링크를 통해 그러한 아이디어가 어떻게 구현 될 것입니까? –

+0

@M.K 각 노드가 상태 객체이고 각 링크가 '전환'지도의 항목 인 것 같습니다 –

+0

나는 그것을 보았습니다. 감사합니다. –

3

dk.brics.automaton에서보세요 :

이 자바 패키지는 DFA/NFA 표준 정규 표현식 작업을위한 유니 코드 문자 (UTF16) 및 지원 (연결, 조합과 (유한 상태 오토마타) 구현을 포함하고, 149) 클린의 별 (Kleene star) 및 표준이 아닌 사람 (교차로, 보완 등)

+0

: 라이브러리를 확인해 보겠습니다. 감사합니다. –

0

될 것입니다. Digraph를 사용하여 엡실론 전환을 유지하고 스택을 사용하여 표현을 추적합니다. RS NFA.java에서이 링크를 확인하십시오.

관련 문제