2010-05-05 4 views
2

으로 채워진 파일을 16 진수로 읽었습니다. 나는 특정 패턴을 말하고, "aaad"(따옴표 제외)라고 말하면된다. 패턴을 볼 때마다 일부 데이터를 다른 파일에 생성합니다. 구문 분석 및 특정 패턴을 찾고 - 일반 텍스트 구문 분석에 유한 상태 시스템을 사용하면 좋은 디자인입니까?

이 프로그램을 설계에서 매우 일반적인 경우 일 것이다.

Finite State Machine으로 설계했으며 상태를 변경하려면 switch-case을 사용하여 C로 구조화 된 구조로되어 있습니다. 이것은 나에게 일어난 첫 번째 구현이었다.

  • 디자인 : 더 좋은 디자인이 있습니까?
  • 구현 : 제가 말씀 드렸듯이 스위치 케이스를 사용할 때 몇 가지 문제점이 있습니까?
+0

그냥 정규식을 사용하지 않는 이유는 무엇입니까? – Pierreten

+0

@Pierreten : C 코드에서 regex를 사용하지 않았습니다. C에 대한 몇 가지 정규식 라이브러리가 있습니까? – Lazer

+2

확실히, http://pcre.org –

답변

1

손으로 구르는 FSM은 간단한 상황에서는 잘 작동하지만 상태 및 입력 수가 증가하면 다루기 힘들어집니다.

이미 설계/구현 한 것을 변경할 이유는 없지만 일반 텍스트 구문 분석 기법에 관심이 있다면 정규식, Flex, Bison 및 ANTLR과 같은 것을 살펴 봐야합니다.

+1

http://www.complang.org/ragel/ 또한 살펴볼 가치가 있습니다. – ergosys

+3

+1 : 정규식은 FSM입니다. 그렇다면 Flex, Bison 및 ANTLR과 같은 도구에서 파서가 생성됩니다. 나는 이것을 좋아한다 : 예, FSM을 사용하십시오; 아니, 네 자신을 굴리지 마. –

1

당황스럽게 단순한 경우는 if 또는 switch의 커플이면 충분합니다. POSIX 시스템에서 문자열을 구문 분석하려면 man regex (3). 전체 파일 (예 : 복잡한 구성)의 모든 기능을 분석하려면, Lex/FlexYacc/Bison을 사용하십시오.

C++로 작성할 때 더 복잡한 경우에는 Boost Regex, 더 복잡한 경우에는 Boost Spirit을보십시오. Flex & Bison도 C++에서 작동합니다.

관련 문제