2012-04-19 2 views
7

로 만들려면 : 이미 문자열이 있고 나무로 다시 구문 분석 할 것인지 OCaml의 구문 분석 문자열 내가이 비슷한 문제를 가지고 나무

How to print a tree structure into a string fast in Ocaml?

그러나 반대 방법으로

.

예를 들어, I는

type expr = 
    Number of int 
|Plus of expr*expr 
|Prod of expr*expr 

가 나는 그때 1 + 2 * 3 + 4와 같은 문자열 (위 링크에서 약간 상이 *+보다 procedence이라고 가정)

01,237,803하십시오 EXPR 유형 Prod(Plus(1,2), Plus(3, 4))

내 문제를하는 방법이 있다면 내가 다른 얘기 할 수 링크,하지만 확실하지 않은 발견을 할 내 결과를 원하는

몇 가지 의견을 공유해주세요. 감사합니다.

답변

4

이 표준 구문 분석 문제 : 직면 모든 컴파일러/통역/등 ... 기본적으로 다음에 아래로 비등하는이 문제를 공격하는 방법은 여러 가지가 있습니다 : 당신의 자신의 쓰기

  • 은 재귀 하강 파서는
  • 그것은 작업중인 것 같은 소리 파서 생성기

에서 생성 된 파서를 사용하여 당신은 추상 구문 트리 (이하 "나무"당신이 문제에 언급을)해야 할 일이다. 당신은 쉽게 OCaml 파서 생성기를 사용하여 그러한 일을 수행 할 수 있습니다. 좋은 것은 Menhir. 일 것입니다. 자신 만의 파서를 작성할 수도 있지만, Menhir 또는 ocamlyacc와 같은 도구를 사용하면 매우 다양하고 빠른 솔루션입니다 간단한 recursive descent parser에서 non LL (1)을 처리하는 것의 장난을 어지럽 혀서).

4

OCaml 배포판에는 필요한 도구를 정확히 수행 할 수있는 도구가 포함되어 있습니다 (Kristopher가 지적한대로 다른 도구가 있음).

ocamlyacc에 대한 설명은 예를 들어 this tutorialrelated example을 참조하십시오. 여기서 작은 표현식 언어에 대한 파서가 정의됩니다.