問題タブ [happy]
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 - Happy のパーサー
Happy (Haskell Tool) でパーサーを実行しようとしていますが、「未使用の罫線: 11 および未使用の端末: 10」というエラー メッセージが表示され、これが何を意味するのかわかりません。一方、ルールのステートメントでの $i パラメータの使用については本当によくわかりません。私のエラーはそれが原因だと思います。誰かが私を助けることができれば...
haskell - Alex + Happyを使用して簡単なインタプリタを作成するためのチュートリアルはありますか?
私は、HaskellでAlex+Happyを使用して簡単な言語の通訳を作成する必要がある学校のプロジェクトに取り組んでいます。
ドキュメントを読んだ後、私はそれのほとんどを理解しましたが、ツールの使用に関する本格的な例を見たいと思います。
haskell - Happy/Haskellで解析中に複数のセマンティック値を保持するにはどうすればよいですか
HaskellでAlex/Happyを使用して単純なレクサー/パーサーを構築しようとしています。テキストファイルのローカリゼーション情報を最終的なASTに保持したいと思います。
ローカリゼーションを使用してトークンのリストを作成するAlexを使用してレクサーを作成することができました。
Happyファイルで、%token部分を宣言するときに、$$記号を使用してトークンのセマンティック部分を宣言できます。
解析ルールでは、$iはこの$$を参照します。
AlexPosn部分とFOOトークンのFoo部分を参照する方法はありますか?今のところ、私はそれらのうちの1つだけを参照する方法しか知りません。''いくつかの$$を追加する''方法に関する情報を見つけて、後でそれらを参照することができます。
そうする方法はありますか?
V。
parsing - BNF を書くとき、{ と } の間に何が入りますか?
BNFで困っています。物事を行う標準的な方法(ある場合)と思われるものと、charやintなどの型、またはすでに組み込まれているものがあるかどうかはわかりません。
ただし、私の主な問題は、中括弧内の BNF の部分がどのように機能するかを理解していないことです。
次のようなものが与えられます:
(これはどこかから簡単に盗まれたもので、yacc / C 用です)
中括弧内は実際に何を言っているのでしょうか? ハッピーパーサージェネレーターについても同様のことを調べましたが、同様に混乱しました。
haskell - カバルでアレックス/ハッピーを使う
私が取っているクラスのコンパイラを書いています。このクラスは特に Haskell ではありませんが、Haskell を使用してコンパイラとインタープリターを作成しています。私の教授が簡単に実行/コンパイルできるように、cabal パッケージをセットアップしました。両方の実行可能ファイルの build-tools フィールドに happy と alex がありますが、Cabal はそれを無視し、Happy と Alex が生成すべきモジュールが見つからないと文句を言います。手動で実行した場合:
その後、陰謀団は完全に実行されます。
以前はcabalが自動的にそれらを実行していたと思いましたが、おそらく私の記憶は不完全です.
リンプ・カバル:
ディレクトリ レイアウト:
haskell - ハッピー/無限ループでネストされたパーサー?
私は幸せで単純なマークアップ言語のパーサーを書こうとしています。現在、無限ループとネストされた要素に問題があります。
私のマークアップ言語は、基本的に 2 つの要素で構成されています。1 つは「通常の」テキスト用で、もう 1 つは太字/強調テキスト用です。
たとえば、次のようなテキストはFoo *bar*
として解析される必要があります[MarkupText "Foo ", MarkupEmph [MarkupText "bar"]]
。
その例の字句解析は正常に機能しますが、解析すると無限ループが発生します-そして、私には理由がわかりません。これは私の現在のアプローチです:
そのアプローチの何が問題なのですか?どうすれば解決できますか?
更新:申し訳ありません。Lexing が期待どおりに機能していませんでした。無限ループはレクサー内にありました。ごめん。:)
更新 2:リクエストに応じて、これをレクサーとして使用しています。
の最初のルールのlexer str
代わりに があったため、無限再帰が発生しました。私の実際のコードはもう少し複雑だったので、それを見ませんでした。:)lexer cs
'*'
yacc - Happy/YACCがシフトするタイミングを減らす
私はパーサーに取り組んでいて、本当にイライラしています。この言語では、次のような表現を使用できます。
また
最後の空の配列を除いて、ほとんどは正しく解析されます。私のパーサーには次のものがあります。
そして、NewExpressionは次のとおりです。
そして、EmptyArraysは1つ以上の空の中括弧です-EmptyArraysが空の文字列を導出する場合、20のshift/reduce競合が追加されます。
ただし、.info
パーサーのファイルを調べると、次のようになります。
ただし、状態214で左中括弧が表示されている場合は、それをスタックにシフトして、EmptyArrayの解析を続行する必要があります。
NewExpression
解析を開始して手荷物から余分なものをすべて取り除くと(たとえば) 、追加の角かっこが正しく解析されるため、何が起こっているのか正確にはわかりません。式、ステートメント、または文法の非終端記号を左中括弧で始めることはできません。特に、if / elseステートメントについて同様のルールがあり、shift / reduceの競合が発生しますが、次のトークンがelseの場合はシフトを選択するためです(この問題は十分に文書化されています)。
何が悪いのか理解するのを手伝ってもらえますか?私は本当にあなたの助けに感謝します、私は問題を理解しようとしている風車に本当に傾いています。
haskell - ハッピー パーサー ルールの順序
Happy (Haskell 解析パッケージ) を使用して、一見独立したルールの順序がその動作に奇妙な影響を与えるケースに遭遇しました。
Happy がどのように機能するかを理解しているので、解析constFoo [Foo]
と解析の両方がconstBar [Bar]
成功するはずです。ただし、上記のコードではconstFoo [Foo]
成功しますがconstBar [Bar]
失敗します。と のルールの順序を入れ替えるconstFoo
とconstBar
、後者は成功し、前者は失敗します。
私が理解していない Happy のセマンティクスの側面はありますか?
haskell - Happy で素敵な構文エラー メッセージを取得するには?
私は現在、幸せなパーサージェネレーターで遊んでいます。
他のパーサー ジェネレーターは、「unexpected endline、expected 'then'」などの適切なメッセージを表示できます。満足して、現在のトークンとエラーの位置を取得するだけです。
上記のようなエラー メッセージが表示される例を教えてください。
haskell - Happy を使用した switch ステートメントの解析
だから、私はこのようなスイッチステートメントを含むコードを解析しようとしています
と
しかし、私は取得し続けます:
生成されたパーサーを実行すると。ここで奇妙なのは、「case」キーワードの2 番目のインスタンスでは失敗するが、最初の では失敗しないことです。なぜそれが世界であるでしょうか?