私はplyで何かを実装しようとしています。 。次のような簡単なネスト検索を作成するにはどうすればいいですか?pyparsingの仕組みを考えれば、これをどのようにプライで実装するのですか
thecontent = pyparsing.Word(pyparsing.alphanums) | '&' | '|'
parens = pyparsing.nestedExpr('(', ')', content=thecontent)
PLYを使用すると、
私はplyで何かを実装しようとしています。 。次のような簡単なネスト検索を作成するにはどうすればいいですか?pyparsingの仕組みを考えれば、これをどのようにプライで実装するのですか
thecontent = pyparsing.Word(pyparsing.alphanums) | '&' | '|'
parens = pyparsing.nestedExpr('(', ')', content=thecontent)
PLYを使用すると、
あなたがpyparsingで書いたことは、まあまあ、それはパーサーでもないので、PLYにはうまく翻訳されません。 nestedExpr
はフォームの表現をすばやく定義するためのヘルパーです。 "これは何であるか分かりませんが、()
(または{}
'または[]
'など)で囲まれており、入れ子にすることができます。単純な関数定義をtype_spec + identifier + parameter_spec + nestedExpr('{', '}')
と定義するために、Cのように区切られた '{}'の構文解析には本当に便利です。あなたのコンテンツが '&'と '|'を含むように定義されているとすれば、 構文解析は、演算の優先順位をオーバーライドするカッコ内のグループ化のサポートを含むブール式です。
Pyparsing WikiのExamplesページのsimpleBool.pyの例では、ブール式の解析をサポートするいくつかのテストケースと式が示されています。 BUTこれは依然としてパーサー定義ステップの多くを隠すヘルパーメソッドinfixNotation
を使用しているため、PLYに直接変換するのは難しいでしょう。私はこの例を参照しています。なぜなら、ブール式の解析(「真」、「偽」などのブールリテラルの解析や、「not」演算子のサポートなど)の解析に関わるものを明確にするのに役立つからです。また、それはあなたに無料のテストケースの束を与えるでしょう - あなた自身を手伝ってください!
PLYが期待するよりも明瞭な文法を見るには、pyparsingのfourFn.pyの例を見てください。それはinfixNotation
よりも先行しており、様々な操作の優先順位を明示的に構築します。 (算術演算子の優先順位の実装のこの形式の優雅さは、最初はアプリケーションの解析に興味を持っています)