問題タブ [uu-parsinglib]

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.

0 投票する
1 に答える
4863 参照

parsing - Parsec または happy (alex を使用) または uu-parsinglib

Verilog (または vhdl) 言語のパーサーを作成し、解析されたデータの多くの操作 (一種の変換) を行う予定です。私は非常に大きなファイル (完全な Verilog デザイン、最大 10,000 行) を解析するつもりであり、最終的にはほとんどの Verilog をサポートする予定です。タイピングは気にしませんが、他のルールのサポートを追加するたびに、コードのどの部分も書き直したくありません。

Haskell で、どのライブラリをお勧めしますか? 私は Haskell を知っており、以前に Happy を (プレイするために) 使用したことがあります。コード内の解析された文字列を変換するために Parsec を使用する可能性があると感じています (これは大きな利点です)。私は uu​​-paringlib の経験がありません。

Verilog/VHDL の完全な文法を解析するには、どれが推奨されますか? 私の主な関心事は、気まぐれで解析されたデータを操作できる簡単さと「正確さ」です。速度は主要な関心事ではありません。

0 投票する
1 に答える
183 参照

parsing - uu-parsinglib Haskell パーサー コンビネーターで状態を維持する方法

パーサーコンビネーターを書いているときgetに、put関数を使用できるようにしたいと思います。State Monaduu-parsinglib

これはどのように行うことができますか?このライブラリを使用して状態パーサーを作成できますか?

0 投票する
1 に答える
100 参照

parsing - Haskell の uu-parsinglib でエラー処理をカスタマイズする

次のことは可能ですか。

  1. uu-parsinglibHaskellで使用してカスタムパーサーエラーをスローしますか? (特に位置情報付きのカスタムエラーメッセージを出力したい)
  2. エラーがユーザーに表示される方法をカスタマイズしますか?
  3. 自動補正が行われる場所をどうにかして制御しますか? たとえば、識別子の最初の文字が大文字の場合は削除するなど、いくつかの自動修正手順を拒否したい (識別子は小文字で始まる必要があります)
0 投票する
1 に答える
244 参照

parsing - Correctly parsing line indentations in uu-parsinglib in Haskell

I want to create a parser combinator, which will collect all lines below current place, which indentation levels will be greater or equal some i. I think the idea is simple:

Consume a line - if its indentation is:

  • ok -> do it for next lines
  • wrong -> fail

Lets consider following code:

Which gives following output:

The result for s1 is correct. The result for s2 should consume first "a" and stop consuming. Where this error comes from?

0 投票する
1 に答える
223 参照

parsing - uu-parsinglib によるモナディック解析

uu_parsinglib を使用して Monadic パーサーを作成しようとしています。カバーしたと思っていましたが、テストで予期しない結果が得られました

私のパーサーの切り詰めた例は次のとおりです。

pName はあいまいなパーサーです。型パーサーに実行させたいのは、ポスト フィルターを適用し、nameFilter を満たすすべての代替を ASTType としてラップして返すことです。

何もない場合、失敗するはずです。

(リストに有効な一致が複数ある場合、私が示した例は失敗することを認識していますが、例はその目的を果たしています)

さて、これは私が見る限りすべて機能します。問題は、奇妙な一致が発生するように見える、より複雑な文法で使用する場合にあります。問題はaddLength 0の部分だと思います

私がやりたいのは、モナド部分と適用部分を分離することです。フィルタリング コンポーネントを使用してモナド パーサーを作成し、<**> 演算子を使用して pName を適用します。

あるいは

addLength が何をしているかについての本当に良い説明に落ち着きます。

0 投票する
3 に答える
375 参照

parsing - パーサーの最小長を計算できません - Haskell の uu-parsinglib

コード スニペットを見てみましょう。

パーサーでこのコードを次のように変更すると:

エラーが発生しました:

上記のパーサーは同じように動作するはずだと思いました。なぜこのエラーが発生するのですか?

編集

上記の例は (質問を単純化するために) 非常に単純であり、以下に示すように、ここで do 表記を使用する必要はありませんが、使用したい実際のケースは次のとおりです。

do ステートメントの前に「addLength 1」を追加すると問題が解決することに気付きましたが、正しい解決策かどうかはわかりません。

0 投票する
1 に答える
160 参照

parsing - uu-parsinglib での計画外の貪欲な動作

問題

今日問題が発生しましたが、解決方法がわかりません。私が書いたコードは (私の現在の知識によると) 正しいはずなので、私には非常に奇妙です。

以下に、サンプルのパーサー コンビネータを示します。最も重要なものはpOperator、非常に単純な方法 (デモンストレーション目的のみ) でオペレーター AST を構築する です。「x」を消費し、空白で区切られた複数の「x」を消費できます。

pParens次のように定義されたコンビネータもあります。

そのため、括弧を閉じる前に空白を消費します。

サンプル入出力

正しい入出力は次のようにする必要があります:

しかし、私は得ています:

しかし、2 番目の例ではエラーが発生します。パーサーは、いくつかのトークンを貪欲に食べるように動作します (貪欲な操作はありません)。

私はそれを手伝ってくれてありがとう。

サンプルコード

重要

次と同等です。

に従って: Combinator Parsing: A Short Tutorial

また、演算子の優先順位を定義するために使用されます。

0 投票する
3 に答える
499 参照

parsing - Haskell のパーサー コンビネーター文字ストリームに文字を挿入する

この質問は と の両方Parsecに関連していuu-parsinglibます。パーサー コンビネーターを作成すると、コンパイラーからの文字ストリームが処理されます。文字を解析して入力ストリームに戻す (または別の文字を戻す) ことは何とか可能ですか?

たとえば、入力「test + 5」を解析し、、、、を解析し、tパターンを認識した後e、たとえば文字を文字ストリームに戻したいので、照合している解析プロセスを続行しながらsttestvv + 5

今のところ、これを特定のケースで使用したくはありません。その可能性を深く学びたいと思っています。