2012-04-19 4 views
7

を作るために:私はすでに文字列を持っていると木であることを戻ってそれを解析すること OCamlの構文解析文字列は、私はこれに似た問題を持っている木

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

しかし、反対の方法で

、。

例えば、私は

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

を有し、I(上記リンクから少し異なる、*+より高いprocedenceを有していると仮定)* 3 1 + 2 + 4のような文字列を有する
それから

:私の結果はexprのタイプProd(Plus(1,2), Plus(3, 4))

になりたい私は別の本について話かもしれないリンクが、それは私の問題を行うための方法だかどうかわからないを発見しました

いくつかのアイデアを共有してください、ありがとうございます。

答えて

4

これは、標準的な解析の問題です:に直面しているすべてのコンパイラ/インタプリタは/ etc ...基本的には次の煮詰めるれ、この問題を攻撃するいくつかの方法があります:あなた自身を書く

  • は、再帰下降パーサは
  • は、それはあなたが取り組んでいるもののように聞こえるパーサジェネレータ

から生成されたパーサを使用しますが、抽象構文木(「木」問題に言及する)必要があるものです。あなたは簡単にOCamlパーサジェネレータを使ってそのようなことを達成することができます。良いものはMenhir.でしょう。あなた自身のパーサーを書くこともできますが、Menhirやocamlyaccのようなツールを使ってそれを行うのは非常に汎用性があり、シンプルな再帰的な降下パーサーで非LL(1)のものを扱うことのうんざりを混乱させます)。

4

OCamlディストリビューションには、必要なものを正確に実行するためのツールが含まれています(Kristopher氏が指摘しているように、他のツールもあります)。

ocamlyaccの良い説明については、this tutorialrelated exampleを参照してください。小さな表現言語(あなたと同じような)のパーサーが定義されています。

関連する問題