問題タブ [ply]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - PLY:アイテムの長いリストをすばやく解析しますか?
私はPLYでかなり単純なパーサーを使用しており、私のルールの1つは次の形式を取ります。
入力ファイルは一般にthingsの単純なリストであるため、解析自体は複雑ではありません。ただし、私の入力ファイルのいくつかは非常に大きいです(かなり定期的に100,000行を超え、極端な場合は1,000,000行を超えます)。プロファイリング(cProfileおよびpstatsを介して)では、ランタイムの大部分はp_things、リスト内のアイテムごとに1回の呼び出しで、実行時間の大部分を占めthingsます。
この時間を短縮する方法、またはこのルールを構成するためのより効率的な方法はありますか?私がこれまでに見たほとんどの回答(および私が見つけた正規のコンパイラ情報)は、長さに関係なく、解析可能なアイテムのリストを作成するための一般的に受け入れられている方法としてこのメソッドをリストしています。
python - PLY を使用して SQL ステートメントを解析する
SQL ステートメントを解析するためのツールが他にもあることは知っていますが、教育目的で独自のツールを展開しています。私は今文法に行き詰まっています..間違いをすぐに見つけることができれば、私に知らせてください.
「SELECT a FROM b;」のようなステートメントを解析しようとすると、FROM トークンで構文エラーが発生します...どんな助けも大歓迎です!
(編集)コード:
python - ply lexmatch正規表現には、通常のreとは異なるグループがあります
plyを使用していますが、reモジュールで通常の方法で定義されたsre_patternと比較して、t.lex.lexmatchに格納されているトークンのrematchの間に奇妙な不一致があることに気づきました。group(x)は1ずれているようです。
私が見ている動作を説明するために、単純なレクサーを定義しました。
(t_errorに関する警告が表示されますが、今は無視します。)次に、いくつかの入力をレクサーにフィードして、トークンを取得します。
取得しLexToken(CHAR,<_sre.SRE_Match object at 0x100fb1eb8>,1,0)ます。一致オブジェクトを確認したい:
だから今私はグループを見てみましょう:
m.group()=>'h'私が期待するように。
m.group(0)=>'h'私が期待するように。
m.group(1)=> 'h'、それでも私はそれがそのようなグループを持っていないことを期待します。
これを、このような正規表現を手動で作成することと比較してください。
これにより、さまざまなグループが作成されます。
m2.group()='h'私が期待するように。
m2.group(0)='h'私が期待するように。
m2.group(1)IndexError: no such group私が期待するように与えます。
この不一致が存在する理由を誰かが知っていますか?
python - Python PLY-この文法に何か問題がありますか?
単純な式パーサーにPythonPLYを使用しようとしていますが、動作させることができません。コードはbitbucketで入手できますが、問題のある部分は次のとおりです。
まず、定義:
と
反転しているようで、結果が得られます:3-9=6および2/8=4。
次に、括弧式factor: ( expr )が機能しません。特に、その部分:
正しく機能しません。(9+7)raisesなどの式の解析:
これらのエラーの原因は何ですか?
python - Python で PLY を使用した 2 ワード トークン
私はラボの演習の一環としてコンパイラを作成しており、PLY を使用して Python で作成することにしました。私はこの特定の問題を解決するために時間を費やしましたが、ラボのヘルパーと同様に行き詰まりました。
私が書かなければならない言語では、宣言子は「was a」という 2 つの単語で指定されます。例えば:
x was a number and x became 5.
に等しい
int x; x = 5;
PLYで解析するとき、予約語として「was a」を入れました
しかし、PLY lexer で解析すると、'was' と 'a' が別々のトークンとして扱われます。
was aPLY lexer で分割せずに、タイプ 'DECLARATOR' のトークンとして解析するにはどうすればよいですか?
不明な点がある場合はお知らせください。可能な限り質問にお答えします
ありがとう、
ピート
python - Python PLY パーサー
この質問に対する答えを探してみましたが、見つからないようです。PLY を使用して、作成された言語のパーサーを Python で作成しようとしています。私の BNF の簡略版は次のようになります。
number と letter は int と char のようなものです。
Yacc のドキュメント ( http://www.dabeaz.com/ply/ply.html#ply_nn23 ) は、p[0] がどうあるべきかが明確な単純な算術式の構文のみを示しています。
私の質問は、BNF の statement-list に対して何をすればよいですか? 私が持っている:
しかし、次に何を入れるべきか本当にわかりません。どんな助けでも大歓迎です!
parsing - YACC タイプのパーサーを最短一致の入力で停止するにはどうすればよいですか?
コンテキストは次のとおりです。ファイル (またはストリーム) があり、そのヘッダーを処理して停止し、残りのデータを別の方法で処理したいと考えています。つまり、次のようなストリームがあるとしますBEGIN GOOD GOOD GOOD GOOD GOOD DONE JUNK JUNK JUNK JUNK ...。最初の部分 ( BEGIN GOOD+ DONE) は私の文法に合っていますDONE。
私の知る限り、YACC とその友人たちは、トークンがなくなるまでトークンを消費し続けたいと考えているので、すべてのJUNK. これを回避する方法はありますか?
私は PLY (Python の Lex と Yacc の実装) を使用していますが、ここで一般的な回答を受け付けています。
python - 字句解析演算子とPLYPythonを使用した符号付き整数
合計演算子と符号付き整数を区別するために生の式を作成するにはどうすればよいですか?私はPLYPythonを使用しています。
残念ながら、これは機能しませんでした。
python - lexer エラー処理 PLY Python
t_error() 関数は、不正な文字が検出されたときに発生する字句解析エラーを処理するために使用されます。私の質問は次のとおりです。この関数を使用して、エラーに関するより具体的な情報を取得するにはどうすればよいですか? エラーの種類、エラーが表示されるルールまたはセクションなど。