2016-09-30 2 views
0

나는 이미 Stackoverflow에서 몇 가지 soultions 및 자습서를 읽었지만 특정 문제에 도움이되지 않습니다. 시작하려면 ,이 DFA 있습니다 enter image description hereDFA에서 정규 표현

를 그리고이 그것을 감소시킬 수있다 : 나는 (AA | 바 | CC)에서 정규 표현식을 가질 수 있도록

enter image description here

다하지만 누락 돌아 오는 d. 그것까지는 http://hackingoff.com/compilers/regular-expression-to-nfa-dfa으로 확인하면 시작 DFA와 정확히 같지만 d없이 보입니다. 나는 많이 시도했지만 RE를 d로 작성하는 방법을 잘 모르겠습니다.

+0

'd'가 어디에 나타나야합니까? 귀하의 질문에 약간은 분명하지 않습니다. –

+0

사실 그것은 제 질문입니다. 나는 그것이 정규 표현식에 속해있는 방법을 모르겠다. DFA는 가능하다고 말하지만 끝 부분에 나타나지 않아도됩니다. 그러나 그것이 나타나면 정규식이 처음부터 시작됩니다. 당신이 q1에서 그것을 끝낼 때까지 그리고 d0를 q0으로 돌려 보내지 않을 때까지. –

+0

@TimBiegeleisen 그것은 나에게 꽤 분명합니다. 문자열은 시퀀스'(aa | ba | cc) c'이어야하며,'d '로 끝나지 않아야하지만'd'가 나타나면 다시 받아 들여지는 첫 번째 시퀀스가 ​​필요합니다. 정규 표현식은'^ (?: aa | ba | cc) c (? : d (? aa | ba | cc) c) * $'와 유사 할 수 있습니다. – Xufox

답변

0

revo으로 지적 된 제안 된 시퀀스가 ​​정확하지 않습니다. 올바른 순서는 (aa|ba|c)c입니다.

(프로그래밍 언어) 정규식 버전 전체 DFA의이 공식 정규식

(aa|ba|c)c(d(aa|ba|c)c)* 

(?:aa|ba|cc)c

/^(?:aa|ba|c)c(?:d(?:aa|ba|c)c)*$/ 

될 것은 이미 알아 낸 첫 번째 순서 (모든로부터 q0에서 q6까지이고 d 경로가없는 경우 q6에서 q0으로 되돌아갑니다.

d이 표시되면 기본적으로 위의 시퀀스 이 다시이 필요합니다. d을 포함하는 시퀀스의 두 번째 인스턴스는 여러 번 반복 될 수 있으므로 * 한정 기호를 사용합니다.

+0

아쉽게도 이것이 DFA를 설명하는 방법이 아닙니다. 당신은 여기에 당신의 정규식을 시도 할 수 있습니다 : http://hackingoff.com/compilers/regular-expression-to-nfa-dfa 그것은 당신에게 오류를 다시 줄 것입니다. –

+0

@KendelVentonda 오, 글쎄, 내 편집을 참조하십시오. 프로그래밍 언어에서 사용되는 정규 표현식 대신 공식 정규식이 필요하다는 것을 알지 못했습니다. – Xufox