非常に簡単な質問があれば申し訳ありません。 しかし、C++ではどのようにライブラリなどを使って以下のようなデータを解析できますか?これらのタイプのデータをどのライブラリなどで解析できますか? C++で
(car
(position
(x 2500)
(y 3000)
(z 1200)
)
(appearance
(color blue)
(type sport)
)
)
非常に簡単な質問があれば申し訳ありません。 しかし、C++ではどのようにライブラリなどを使って以下のようなデータを解析できますか?これらのタイプのデータをどのライブラリなどで解析できますか? C++で
(car
(position
(x 2500)
(y 3000)
(z 1200)
)
(appearance
(color blue)
(type sport)
)
)
このような形式は見たことがありません。私は自分のパーサーを振り回すように誘惑されるだろう。
または、コードジェネレータを記述してXMLに変換します。その後、たくさんの図書館があります。
しかし、そこには簡単な答えがあるかもしれません。
XMLに変換しますか?しかし、それを行うには、彼はそれを解析する必要があるだろう... :) – Mac
@マック:そしてそれで何をしますか? OPは言っていないが、おそらく彼は彼らに有用な何かをしたいと思っている。 XMLを使ってほしいものがあれば、それを行うための多くの既存の機能があります。 「自分のパーサを書く」というバリエーションですが、他の人が投票している間に私の答えは嫌なのはなぜですか?わかりません。 – John
私は、他の質問も同じだったので、あなたがライブラリを探しているにもかかわらず、OPが自分のパーサーにロールを張っていることを示唆しているという事実を否定しました。しかし、XMLは**役に立つ**ことに感謝しますが、OPはXML出力を得る必要性について言及していないので、XML出力レイヤーと同様にパーサーをロールバックすることは(おそらく)重複しています。パーサそれは私にビーチハウスを建てるための優れた建築家を提案することができるかどうかを尋ねるようなものです。あなたは自分で家を建てることを勧めます。私は建築家が欲しいとプールを必要としません... – Mac
は、boost spiritの良い候補のようです。
boost.spiritは、これらのタイプの解析問題にとって間違いなく素晴らしいです。しかし、初心者にはあまり適していません(単純なテキストを解析する方法を知らず、テンプレートメタプログラミングに慣れている人はいませんか?私はちょうど良いオールのstd :: stringstreamを使用して、OPに簡単な自家製パーサを提案するでしょう。 –
@Mikael、間違いなく、かすかな心のためではない、私は同意する。しかし、精神のついた素敵なものの1つは、メタプログラミングの専門家でなくても、それを稼働させることができるということです。同時に、文字列とストリームを使用して独自にハンドリングすることもできますが、フォーマットが上記のものから少し変更された場合は、もう一度修正する必要があります。 OPは図書館を尋ねていましたが、ドキュメントを理解するために少し時間を費やす準備ができていれば、これは意味があります。 – Nim
これはLISPのようです。宿題の問題だと仮定すると、LISPのための簡単な再帰的な降下パーサーを書くことは非常に些細なので、私はあなたの場合は自分のパーサを書くだろう。
C++を使用してLispインタープリタを作成します。次に、そのデータをインタプリタを介して実行します。 – abelenky
90行のC++でのLispインタプリタ:http://howtowriteaprogram.blogspot.com/2010/11/lisp-interpreter-in-90-lines-of-c.html – anno