問題タブ [parsec]
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.
haskell - Parsec - エラー「空の文字列を受け入れるパーサーにコンビネータ 'many' が適用されています」
次のようなリテラシーな Haskell ファイルを解析する Parsec を使用してパーサーを作成しようとしています。
RWH の例に触発されて、次のように書きました。
私が望んでいたのは、次のような結果になることです。
(空白などを許可します)。
これは正常にコンパイルされますが、実行するとエラーが発生します。
誰でもこれに光を当てることができますか?おそらく解決策を手伝ってください?
parsing - Parsec-Parser は問題なく動作しますが、もっとうまくできるでしょうか?
私はこれをしようとします:
次の形式でテキストを解析します。
一部のテキスト #{0,0,0} 一部のテキスト #{0,0,0}#{0,0,0} その他のテキスト #{0,0,0}
いくつかのデータ構造のリストに:
[内側 "一部のテキスト",外側 (0,0,0),内側 "一部のテキスト",外側 (0,0,0),外側 (0,0,0),内側 "その他のテキスト",外側 (0, 0,0)]
したがって、これらの #{a,b,c} ビットは、残りのテキストとは異なるものに変わるはずです。
私はこのコードを持っています:
これは期待どおりに機能します。次のように入力して、ghci でこれをテストできます。
parseTest alot "一部のテキスト #{0,0,0} 一部のテキスト #{0,0,0}#{0,0,0} その他のテキスト #{0,0,0}"
でも、もったいないと思います。
1) の使用はlookAhead
本当に私の問題に必要ですか?
2)return (Inside "")
醜いハックですか?
3)一般的に、同じものをアーカイブするためのより簡潔でスマートな方法はありますか?
haskell - モナド構文解析に対する適用的構文解析の利点は何ですか?
Parsec をモナドではなくアプリカティブとして使うべきだというコンセンサスがあるようです。モナド構文解析に対する適用的構文解析の利点は何ですか?
- スタイル
- パフォーマンス
- 抽象化
モナドは解析していますか?
haskell - アプリケーションのモナディック同等物<*
スタイル関連のパーサーの質問に対するAnthonyの応答を読んだ後、私は、モナディックパーサーを作成することはまだかなりコンパクトである可能性があることを自分自身に納得させようとしていました。
だから代わりに
私たちは単に持つことができます:
これは、Anthonyが提供するアプリケーションバージョンと非常によく似ています。
... 「シーケンスしますが、値を破棄し、左側に提供された値を使用する」という意味として定義されている<<!
ものと概念的に類似している演算子を除きます。<*
liftA2 const
もちろん、<<はの悪い名前だったでしょう。それは、とと同じ論理に従う場合と同等liftM2 const
であることを示唆しているでしょう。<<
flip >>
>>=
=<<
単一の名前で「liftM2const」が見つかりません。あまり役に立たないからですか?
haskell - Attoparsec での条件付き解析とキャスト
長さがエンコードされたバイナリ ストリームを解析しており、このコードをコンパイルしようとしています。コンビナトレントコード ( https://github.com/jlouis/combinatorrent/blob/master/src/Protocol/Wire.hs ) は非常に役に立ちましたが、今は行き詰まっています。return ステートメントで frame_length を使用するにはどうすればよいですか?
また、Word64 にパス (AP.take 8) を使用するにはどうすればよいですか?
haskell - parsec を使用した完全なパーサーの例?
Caml に少し似た単純な関数型言語のパーサーを作成しようとしていますが、最も単純なものにこだわっているようです。
したがって、パーサーのより完全な例がいくつかあるかどうかを知りたいのですがparsec
、「これは2 + 3を解析する方法です」を超えています。特に用語などの関数呼び出し。
また、「Write you a Scheme」も読みましたが、scheme の構文は非常に単純で、学習にはあまり役立ちません。
私が抱えているほとんどの問題はtry
、<|>
を正しく使用する方法です。なぜなら、このパーサーを使用して parsec が関数呼び出しとしてchoice
解析されないように見える理由が本当にわからないからです。a(6)
編集完了のためにいくつかのコードを追加しましたが、これは実際には私が尋ねたものではありません:
AST.hs
Lexer.hs
Parser.hs
haskell - parsecを使用してテキストファイルからデータを選択する
学習演習として、parsecを使用してテストファイル内の値を検索しています。私は通常、この特定のケースに正規表現を使用しますが、parsecも意味があるかどうかを確認したいと思います。残念ながら、私はいくつかの問題に直面しています。
データファイルは、次のような繰り返しセクションで構成されています。「SHEF」は6つの値の1つであり、ページごとに変化します。データ型の作成に使用したいと思います。
各資産クラスの金額のデータ型を作成しています。
正常にコンパイルされる私のコードは次のとおりです。ファイルを解析し、各アセットクラスの値を正しく取得しますが、fundValueパーサーで状態を正しく設定することはできません。私は入力文字列を使用してfundValueパーサーをテストしましたが、正常に解析されましたが、何らかの理由で、ライン関数が思ったとおりに機能していません。「パートA」で始まるファイル内の行を検索し、コードを見つけて、後でタグパーサーが行を正常に解析するときに使用できるように状態を保存する必要があります。
fail
問題を引き起こしているの使用ですか?
前もって感謝します。
delphi - Parsec で複数の種類のコメント ブロックを定義する方法
Delphi パーサーの作成方法を学ぼうとしてParsec
いますが、LanguageDef の定義に行き詰まっています。
Delphi には、2 種類のコメント ブロック(* comments *)
と{ comments }
. しかし、LanguageDef の commentStart と commentEnd の型は [String] ではなく String であるため、どちらか一方しか入れることができませんでした。
そのため、独自の whiteSpace パーサーを作成しようとしましたが、実際に に渡すことができるかどうかはわかりませんmakeTokenParser
。
どんな助けでも大歓迎です。
ありがとう
John と Chris は、私が問題を理解し、回避するのを助けてくれましたが、解決策には、makeTokenParser
提供する膨大な数のパーサーを置き換える必要があるため、まったく望ましいことではありません。
より良い解決策が見つかったら、再度投稿します。
haskell - Haskell Parsec の機能
私はこのページ http://book.realworldhaskell.org/read/using-parsec.htmlで作業しており、CSVファイルパーサーを機能させようとしていますが、気づいた
常に a を返します
後でコードで使用できる配列の配列だけを返す場所で解析して動作させる方法はありますか?
例:
ありがとうございました
haskell - パーセクは単一のUnicode文字に一致します
改行、コンマ、セミコロン、およびユニコードダッシュ(ndashとmdash)で区切られたトークンを解析するパーセク(parsecを使用)を作成しようとしています。
しかし、ndash-mdash(\ 8212、\ 8213)の部分は「成功」せず、無効な解析結果が得られます。
charパーサーでUnicodeダッシュを指定するにはどうすればよいですか?
PS私も試しました(chr 8212)、(chr 8213)。それは役に立ちません。
追加:Data.Textを使用することをお勧めします。ByteStringsの狂気からData.Textへの切り替えにより、多くの時間と「ソーススペース」を節約できました:)