정규식 state 를 알아낼수 잇나요?
글쓴이: litdream / 작성시간: 화, 2008/01/22 - 8:58오전
제목이 이상하게 되었네요.
내용인 즉슨,
PCRE pattern 이 주어졌다고 할때, 내부적으로 state graph 를 만들수 있을것으로 생각되는데요,
( 가령, pcre_dfa_exec() 처럼, DFA state 를 만드는것처럼요. 혹은, python 의 re.compile 도 재사용시 효율적이라고 하는걸로 봐서 graph 를 만들듯 한데요.)
이 diagram 을 human readable 로 뽑아낼수 있을까요?
꼭 human readable 일 필요는 없지만, regex 의 토큰의 특성상 character 로 표현하자면 XML 정도로 만들수 있지 않을까 하는 억측(?)을 해봅니다만...
libpcre 가 해줄수 있지 않을까 봤지만, 제가 잘 모르는지 안되는것 같더군요.
혹시 좋은 방법 아시나요?
Forums:
원하시는건지 모르겠지만
온라인상으로 하는건
http://osteele.com/tools/reanimator/
가 있고
와 같은 형식으로 그려주는 Perl 프로그램인 re_graph라는게 있네요
문서: http://www.oualline.com/sw/re/re_graph.html
소스: http://www.oualline.com/sw/re/re-graph_02.tar
그리고 Graph::Regexp
http://search.cpan.org/dist/Graph-Regexp/
라는 Perl 모듈도 정규표현식을 각종 포멧으로 뽑아내어
Graph::Easy 모듈
http://search.cpan.org/dist/Graph-Easy/
http://bloodgate.com/perl/graph/manual/index.html
을 통해 그래프를 그릴 수 있도록 해줍니다.
위 프로그램/모듈등은 모두 Perl 정규표현식 debug모드에서
출력되는 메시지를 parsing하여 그래프를 그립니다.
예)
결과
다음은 위 결과를 Graph::Regexp 모듈을 사용하여 Graphviz 포멧으로 출력하여 그려진것입니다.

역으로 해주는건 없을런지.
역으로 해주는게 있다면 킹왕짱일듯. 그죠?
제가 식견이 짧아 못 찾은건지도...
바로 제가 찾던것이
바로 제가 찾던것이 이것 맞습니다.
궁극적으로는 test data 를 random 으로 만들고 싶어서 필요한것이었습니다.
특히 boundary case 를 테스트하려고 했는데, perl -e 코드를 막상 perl 로 만들려니 잘 모르겠네요 -_-;
제가 perl 이 약해서...
같은 결과를 얻기위해 코드로 쓰면 어떻게 되나요?
삽질의 대마왕...
삽질의 대마왕...
이렇게 해보세요.
r.pl
perl r.pl '/just|another|perl|hacker/'
이렇게 정규식을 인자로 넘겨주면
표준출력으로 돌려줍니다.
댓글 달기