問題タブ [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.
parsing - Parsec または happy (alex を使用) または uu-parsinglib
Verilog (または vhdl) 言語のパーサーを作成し、解析されたデータの多くの操作 (一種の変換) を行う予定です。私は非常に大きなファイル (完全な Verilog デザイン、最大 10,000 行) を解析するつもりであり、最終的にはほとんどの Verilog をサポートする予定です。タイピングは気にしませんが、他のルールのサポートを追加するたびに、コードのどの部分も書き直したくありません。
Haskell で、どのライブラリをお勧めしますか? 私は Haskell を知っており、以前に Happy を (プレイするために) 使用したことがあります。コード内の解析された文字列を変換するために Parsec を使用する可能性があると感じています (これは大きな利点です)。私は uu-paringlib の経験がありません。
Verilog/VHDL の完全な文法を解析するには、どれが推奨されますか? 私の主な関心事は、気まぐれで解析されたデータを操作できる簡単さと「正確さ」です。速度は主要な関心事ではありません。
parsing - uu-parsinglib Haskell パーサー コンビネーターで状態を維持する方法
パーサーコンビネーターを書いているときget
に、put
関数を使用できるようにしたいと思います。State Monad
uu-parsinglib
これはどのように行うことができますか?このライブラリを使用して状態パーサーを作成できますか?
parsing - Haskell の uu-parsinglib でエラー処理をカスタマイズする
次のことは可能ですか。
uu-parsinglib
Haskellで使用してカスタムパーサーエラーをスローしますか? (特に位置情報付きのカスタムエラーメッセージを出力したい)- エラーがユーザーに表示される方法をカスタマイズしますか?
- 自動補正が行われる場所をどうにかして制御しますか? たとえば、識別子の最初の文字が大文字の場合は削除するなど、いくつかの自動修正手順を拒否したい (識別子は小文字で始まる必要があります)
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?
parsing - uu-parsinglib によるモナディック解析
uu_parsinglib を使用して Monadic パーサーを作成しようとしています。カバーしたと思っていましたが、テストで予期しない結果が得られました
私のパーサーの切り詰めた例は次のとおりです。
pName はあいまいなパーサーです。型パーサーに実行させたいのは、ポスト フィルターを適用し、nameFilter を満たすすべての代替を ASTType としてラップして返すことです。
何もない場合、失敗するはずです。
(リストに有効な一致が複数ある場合、私が示した例は失敗することを認識していますが、例はその目的を果たしています)
さて、これは私が見る限りすべて機能します。問題は、奇妙な一致が発生するように見える、より複雑な文法で使用する場合にあります。問題はaddLength 0の部分だと思います
私がやりたいのは、モナド部分と適用部分を分離することです。フィルタリング コンポーネントを使用してモナド パーサーを作成し、<**> 演算子を使用して pName を適用します。
あるいは
addLength が何をしているかについての本当に良い説明に落ち着きます。
parsing - パーサーの最小長を計算できません - Haskell の uu-parsinglib
コード スニペットを見てみましょう。
パーサーでこのコードを次のように変更すると:
エラーが発生しました:
上記のパーサーは同じように動作するはずだと思いました。なぜこのエラーが発生するのですか?
編集
上記の例は (質問を単純化するために) 非常に単純であり、以下に示すように、ここで do 表記を使用する必要はありませんが、使用したい実際のケースは次のとおりです。
do ステートメントの前に「addLength 1」を追加すると問題が解決することに気付きましたが、正しい解決策かどうかはわかりません。
parsing - uu-parsinglib での計画外の貪欲な動作
問題
今日問題が発生しましたが、解決方法がわかりません。私が書いたコードは (私の現在の知識によると) 正しいはずなので、私には非常に奇妙です。
以下に、サンプルのパーサー コンビネータを示します。最も重要なものはpOperator
、非常に単純な方法 (デモンストレーション目的のみ) でオペレーター AST を構築する です。「x」を消費し、空白で区切られた複数の「x」を消費できます。
pParens
次のように定義されたコンビネータもあります。
そのため、括弧を閉じる前に空白を消費します。
サンプル入出力
正しい入出力は次のようにする必要があります:
しかし、私は得ています:
しかし、2 番目の例ではエラーが発生します。パーサーは、いくつかのトークンを貪欲に食べるように動作します (貪欲な操作はありません)。
私はそれを手伝ってくれてありがとう。
サンプルコード
重要
次と同等です。
に従って: Combinator Parsing: A Short Tutorial
また、演算子の優先順位を定義するために使用されます。
parsing - Haskell のパーサー コンビネーター文字ストリームに文字を挿入する
この質問は と の両方Parsec
に関連していuu-parsinglib
ます。パーサー コンビネーターを作成すると、コンパイラーからの文字ストリームが処理されます。文字を解析して入力ストリームに戻す (または別の文字を戻す) ことは何とか可能ですか?
たとえば、入力「test + 5」を解析し、、、、を解析し、t
パターンを認識した後e
、たとえば文字を文字ストリームに戻したいので、照合している解析プロセスを続行しながらs
t
test
v
v + 5
今のところ、これを特定のケースで使用したくはありません。その可能性を深く学びたいと思っています。