2010-03-02 3 views
0

내가 쉽게 파싱 할 수있는 텍스트가 있다고 가정 해보십시오. 텍스트와 특수 식별자로 구성됩니다. 구문 분석 후에 텍스트의 텍스트와 특수 식별자에 해당하는 토큰 목록을 얻습니다.텍스트 변환기를 작성하는 방법은 무엇입니까?

내가 가지고있는 문제는이 토큰 목록에서 다른 형식으로 변환하는 방법입니다.

이 문제에 접근하는 방법을 이해할 수 없습니다.

구문 분석 트리를 만들려고했지만 다음에 수행 할 작업을 이해할 수 없습니다.

일반적인 구문 분석 문제에 대해 알려주십시오.

+2

Autobot 또는 Decepticon? 미안 ... 나 자신을 도울 수 없어. –

+0

저스틴을 의미하는 것은 무엇입니까? Autobot과 Decepticon이 무슨 뜻인지 확신 할 수 없습니까? – bodacydo

+0

오. 변압기 : – bodacydo

답변

3

일단 토큰 스트림이 있으면 파서 생성기를 사용하고 언어의 grammar을 지정하여 구문 분석 트리로 변환 할 수 있습니다. 사용하려는 프로그래밍 언어에 따라

, 다음과 같은 파서 생성기로 볼 수도 있습니다 :

C/C++ - Yacc

자바 - ANTLR (도 JavaCC에, SableCC)

파이썬 - PLY (파이썬 렉스/Yacc에)

OCaml의 - ocamlyacc

,

문법에 대해 잘 모르는 경우 파서 생성기에 대한 설명서를 통해 충분히 이해할 수 있습니다.

구문 분석기가 완료되면 토큰 스트림을 가져 와서 중간 표현 (다양한 언어 (예 : 언급 한 특수 식별자))을 나타 내기 위해 정의하는 유형을 사용하여 트리를 구성합니다. 그런 다음 원하는대로 트리를 조작 할 수 있습니다.

: 귀하의 의견에 응답하여 - 귀하가 어떤 문제를 가지고 있는지 정확하게 말할 수 없으므로 어떤 수준의 대답을 드릴지 확신하지 못합니다. 먼저 tree data structures에 익숙합니까? 그렇다면 간단한 재귀 알고리즘을 작성하여 트리의 높이를 찾거나 깊이 우선 검색을 수행하는 방법을 알고 있습니까? 나무는 정보를 체계화하는 방법 일 뿐이라는 것을 기억하십시오. 정보를 가지고하는 일은 전적으로 당신에게 달려 있습니다.

이질적인 트리 (즉 노드가 다른 유형의 트리)에 알고리즘을 적용하는 일반적인 디자인 패턴은 Visitor pattern입니다. 이미 나무에 익숙하다면, 방문객 패턴의 예제를 원하는 언어로 찾을 수 있습니다. 그러나 개념이 처음이라면 연습을위한 간단한 알고리즘으로 시작하는 것이 좋습니다.

+0

좋은 답변 주셔서 감사합니다. 이로 인해 내 목표를 달성하는 데 한 걸음 더 가까워졌습니다. 나에게 여전히 매우 신비한 한 가지는 당신이 어떻게 "나무를 조작 하는가?"입니다. 이 주제를 조금 확장 할 수 있습니까? 이해할 수 있듯이, 파서 생성기는 트리를 생성하지만, 그 후에 트리를 조작하는 방법을 어떻게 알 수 있습니까? 이것은 내가 막 붙어있는 곳입니다. 내 마음은 "나무를 조작하는 것"을 둘러 쌀 수 없습니다. – bodacydo

관련 문제