問題タブ [alex]
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 - 解析時に alex で monadUserState を使用するには何を追加する必要がありますか?
コメントの埋め込みが許可されている言語を理解するプログラムを作成しようとしています。そのような:
これはコメントとして認識される必要があります (そのため、最初のコメントで停止しません */ 前に 1 つのコメントのみが開かれているのを確認した場合を除きます)。
これは C で修正するのは簡単な問題です。コメントが開いているとインクリメントし、コメントが閉じているとインクリメントするカウンターを単純に持つことができます。カウンターが 0 の場合、「コード セクション」にいます。
ただし、Haskell に状態がない場合は、もう少し難しくなります。
この正確なタイプの解析の状態を追跡できると思われる monadUserState を読みました。ただし、 alex のチュートリアル ページを除いて、読み物はあまり見つかりません。
コンパイルしようとすると、エラーが発生します
コードを変更せずに、「基本」ラッパーから「monadUserState」に直接変更したことに注意してください(使用するために何を追加すればよいかわかりません)。これはユーザーコードで初期化する必要があると言われています:
私は少しレキシング初心者で、少なくともコンパイルするためにここに何を追加すればよいかまったくわかりません...その後、物事のロジックについて心配することができます。
haskell - ハッピーとアレックスはどのようにして自分自身をブートストラップしますか?
happy
containsAttrGrammarParser.ly
およびcontainsのソースParser.ly
ツリー。それでも、私が知る限り、 をコンパイルするには、 ... を使用してファイルをファイルに変換する必要があり、コンパイルするには、...を使用してファイルをファイルに変換する必要があります。alex
Scan.x
happy
.ly
.lhs
happy
alex
.x
.hs
alex
したがって、いずれかのツールをコンパイルするには、ここでいくつかのブートストラップが行われている必要があるようです。
各プロジェクトのSetup.lhs
ファイルにはいくつかのテンプレート拡張が含まれていますが、私が知る限り、ブートストラップを行うために特に何もしていません。
ブートストラップはどこでどのように行われますか?
haskell - cabal を正しくインストールしましたか?
こんにちは、コマンドで cabal を最新バージョンに更新しました
と
その後、それは戻ります
アレックスとハッピーを使いたい。申し訳ありませんが、私はそれに非常に慣れていません..行でghciでalexを発行しようとしたとき
戻る
これをオンラインで検索したところ、最初にバージョンを確認する必要があるというWebページが見つかりました。
しかし、私はこの行を得ました
誰でもこの問題を解決できますか?
haskell - Haskell/Alex: 警告: タブ文字
Haskell でおもちゃの言語を書いています。アレックスを使用してスキャナーを生成しています。プロジェクトを cabal でビルドするたびに、次の警告が表示されます。
alex によって生成されたスキャナーは、スペースの代わりにタブを使用しているようで、ghc のデフォルトの動作は、これについてユーザーに警告することです。
alex にスペースの使用を強制する方法、または ghc からの警告を (cabal 経由で) 抑制する方法を知っている人はいますか?
parsing - Parsec で複雑なファイルを解析する
複数のデータ シーケンス (同じ列数、同じ内容など) を含むファイルを Haskell で解析したいと考えています。データ シーケンスは前後のキーワードで区切られます。
私の問題は、Parsec でいくつかのテストを行った結果、Parsec はファイル全体ではなく、ファイルを 1行ずつ解析するように作成されているという印象を受けることです。
Parsecは私が望むものを作成するための正しい方法ですか、それとも Happy や Alex のような他のツールを検討する必要がありますか?
Parsecで複雑なテキスト ファイルを解析する例を提供する Web サイト (または他のリソース) はありますか?
注 : 私が示す例は非常に単純なものです。私のファイルでは、より多くのキーワードと組み合わせを使用すると、事態はより複雑になります。
parsing - Happy プロジェクトでは、「templates/wrappers.hs」はどこにありますか?
アレックスとハッピーを使ってパーサーを作ろうとしています。この投稿の指示に従っていますが、問題があります。次のタイプのエラーの原因を突き止めようとしています。
私のレクサーは src/AnsiParser/FrontEnd/Lex.x にあります。そこで、dist/build/AnsiParser/FrontEnd/Lex.hs を調べたところ、次のようなものしか見つかりませんでした。
しかし、システム上に「wrapper.hs」という名前のファイルが見つかりません。このエラーの原因を追跡するにはどうすればよいですか?
役に立つ場合に備えて、Parse.y の縮小版を次に示します。
そして Lex.x:
parsing - Happy が解析エラーをスローする原因は何ですか?
私は Alex で字句解析器を書き、それを Happy で書かれたパーサーに接続しようとしています。膨大な量のコードを貼り付けずに、問題を要約するために最善を尽くします。
lexer の単体テストから、文字列"\x7"
が lexed されることを知っています。
私のトークンタイプ(レクサーによって吐き出される)はToken
. ここで説明したようにlexWrap
andを定義しました。これにより、次のヘッダーとトークンの宣言が得られます。alexEOF
パーサーとレクサーの組み合わせを次のように呼び出します。
そして、ここに私の最初のいくつかの作品があります:
Expr
andのデータ型宣言NonPrint
は長く、ここではコンストラクターCmd
とNonPrint
マターだけなので省略します。この関数parseNonPrint
は、Parse.y の下部で次のように定義されています。
また、私のエラー処理関数は次のようになります。
このように書くと、次の hspec テストに合格することが期待されます。
しかし、代わりに、"exprs 30"
print once (5 つの異なる単体テストを実行しているにもかかわらず) とparseExpr
returnのすべてのテストが表示されRight []
ます。なぜそうなるのかはわかりませんが、exprs
それを防ぐためにプロダクションを変更しました:
これで、ヒットした最初のトークンですべてのテストが失敗します --- 次のようにparseExpr "\x7"
失敗します。
exprs -> expr -> nonprint -> NONPRINT
そして、パーサーがパスをたどって成功することを期待していたので、私は完全に混乱しています。この入力によってパーサーがエラー状態になる理由がわかりません。どのtrace
ステートメントもヒットしません (最適化されていますか?)。
私は何を間違っていますか?
haskell - Alex lex.x のコンパイル: 範囲内にありません 'begin'
ブロックコメントを解析するために、Lex.xに以下のステートメントがあります。
しかし、Alex を使用して Lex.hs を生成すると、'begin' 関数が追加されません。これにより、以下のコンパイル エラーが発生します。
何が間違っているのでしょうか?
ラッパー「posn」を使用しています