2011-12-28 2 views
3

トークンのリストと(単純な文字列として渡された)EBNFのような文法が与えられている構文パーサモジュール(Ruby、Python、Javascriptなどで書かれています)を知っていますか?パースされた木?私が見つけた最も近いのはSimpleParseです。これはすばらしいライブラリですが、残念なことにシングルステップ解析(トークン化なし)を使用しています。可能であれば、実装が言語そのものに絡み合っているライブラリ(pyparsingtreetop、...)を使用しないでください。EBNF構文パーサーモジュール

多くのライブラリが用意されているので(自分自身でも簡単に書くことができます)、ENBFパーサーを実装することはまったく簡単な作業ではありません。私はPython wiki LanguageParsingをチェックして、それらのいくつかを無駄にテストしました(おそらく、私が探しているものを見落としてしまった、そんなにたくさんある...)

+0

あなたが構文解析した文法と、入力で何をしたいのかによって、どのようなパーサーが実行可能になるのでしょう...どうしてそれは言語に依存せず、EBNFでなければならないのですか?とにかくコードを書く必要があり、純粋なEBNFは "マッチする/マッチしない"という認識のためだけに役に立ちます。 – delnan

+0

@delnan:私はトランスコンパイラを書いています(主にレクサーとパーサー、何も深刻ではありません)、最初のステップとして、自分の言語をEBNF(または他の構文記述子)として記述し、それから構文解析します(そして後にASTなどを生成します)。歓迎。 – tokland

答えて

0

もう少し検索した後、典型的なlex/yaccアプローチはをnode.jsに使用しています。

1

もしあなたがClojureに慣れているのであれば、私はInstaparseがすばらしくなると感じました。 「バニラ」EBNFは、複数行の文字列(または別々のファイル)として記述することができます。また、文脈自由文法を超えてEBNFを文脈依存文法に拡張することもできます(これはあまり遊んでいませんが)。

+0

私はClojureに精通しています。私はそれを調べます、ありがとう! – tokland