2011-02-17 3 views
1

길게 이야기하면 마치 내가 일하는 텍스트 구문 분석 엔진을 다시 작성하는 것처럼 보입니다.토큰 구문 분석 패턴에 대한 정보 출처

텍스트 블록에 텍스트가 들어오고,이 텍스트에는 사용자 정의 태그가 있고, 간단한 일회용 대체, 내용이있는 블록, 일부 중첩 등이 있습니다. 일부 태그에는 인수/값 쌍이 있습니다 등등.

나는 수년간 코딩을 해왔고 나는 중간 수준의 정규 표현식 사용자라고 말할 것이다. 나는 하드 코어 텍스트 파싱이 나의 장점이 아니라는 것을 처음으로 인정합니다. 그리고 이것은 신속해야하므로 최적화가 중요합니다.

필자는 이러한 종류의 구문 분석에 대한 패턴과 주석에 대한 정보 출처를 찾고 있습니다. 나는 너의 무엇이든을 제안하는 무엇이든을 읽기 위하여 기꺼이한다. 나는 심지어이 문제를 해결할 방법을 고민하기 전에 스스로를 교육해야합니다.

미리 감사드립니다.

답변

2

이 당신이 한 사람이 쉽게 내가 tokenizers 생성하는 도구를 사용하여 제안 이해할 수있는 간단한 상태 기계로 할 수있는 것보다 좀 더 복잡한 들어간 경우 : flex/jflex/etc합니다.

속도가 매우 중요한 문제이거나 파서 생성기 (예 : ANTLR 등)를 사용할 수있는 경우 손으로 작성한 하향식 파서를 만들 수도 있습니다. 수공예 파서는 일반적으로 더 빠르지 만, 불쾌한 구석을 만들 가능성이 있습니다 :). 당신은 좋은 테스트 케이스를 필요로 할 것이다.

여기에서 시작하는 것이 좋습니다 : Parsing on wikipedia. 재귀 적 하강 파싱을 살펴보십시오 (언어가 실제로 복잡하지 않으면 손으로 작성하고 이해하기 쉽습니다).

1

처음에는 정규 표현식 은 중첩 구조를 구문 분석하는 데 사용할 수 없습니다. 파서를 작성해야합니다. 유서 깊은 yacc에서 antlr에 이르기까지 다양한 도구를 사용할 수 있습니다. wikipedia page을 확인하십시오.

+0

일부 PCRE 식 정규식 구현은 재귀 그룹 일치를 지원하며 중첩 그룹 중괄호/대괄호/괄호를 일치시키는 데 사용할 수 있습니다. 하지만, 특히이 경우에는 사용하지 않는 것이 좋습니다. –

0

절대 정규식을 사용하지 마십시오. 파서를 사용하십시오. 텍스트가 xml이면 원하는 언어로 사용할 수있는 파서가 많이 있습니다. XML이 아닌 경우 사용자 정의 파서를 작성해야합니다.

관련 문제