2016-11-29 1 views

答えて

0

あなたがpyparsingで書いたことは、まあまあ、それはパーサーでもないので、PLYにはうまく翻訳されません。 nestedExprはフォームの表現をすばやく定義するためのヘルパーです。 "これは何であるか分かりませんが、()(または{} 'または[]'など)で囲まれており、入れ子にすることができます。単純な関数定義をtype_spec + identifier + parameter_spec + nestedExpr('{', '}')と定義するために、Cのように区切られた '{}'の構文解析には本当に便利です。あなたのコンテンツが '&'と '|'を含むように定義されているとすれば、 構文解析は、演算の優先順位をオーバーライドするカッコ内のグループ化のサポートを含むブール式です。

Pyparsing WikiのExamplesページのsimpleBool.pyの例では、ブール式の解析をサポートするいくつかのテストケースと式が示されています。 BUTこれは依然としてパーサー定義ステップの多くを隠すヘルパーメソッドinfixNotationを使用しているため、PLYに直接変換するのは難しいでしょう。私はこの例を参照しています。なぜなら、ブール式の解析(「真」、「偽」などのブールリテラルの解析や、「not」演算子のサポートなど)の解析に関わるものを明確にするのに役立つからです。また、それはあなたに無料のテストケースの束を与えるでしょう - あなた自身を手伝ってください!

PLYが期待するよりも明瞭な文法を見るには、pyparsingのfourFn.pyの例を見てください。それはinfixNotationよりも先行しており、様々な操作の優先順位を明示的に構築します。 (算術演算子の優先順位の実装のこの形式の優雅さは、最初はアプリケーションの解析に興味を持っています)

関連する問題