問題タブ [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.
haskell - Happyにバグの可能性はありますか?
私は Happy/Alex を使用してパーサーを作成しています。構文解析している文法は完全にコンテキスト フリーではないため、先読みトークンを取得する必要があります。Happy のドキュメントは、スレッド化されたレクサーを使用する場合、これは次の形式のルールで実行できることを示唆しています。
ルールを書いたので
ただし、これにより ghc が解析できない .hs ファイルが生成されます。GHCは次のエラーを出します:
これは、エラーを生成する haskell 関数です。
mkTypDef = undefined
型エラーが発生していないことを確認するためだけに、を残しました。通常のモナド生成 ( を使用{% <expn> }
) は問題なく動作します。Happy 1.19.4 と GHC 7.8.3 を使用しています。
これはおそらくバグですか、それとも私が間違っていることがありますか?
haskell - Happy から GLR パーサーをコンパイルする際のエラー - 「入力 'case' の解析エラー」
複数の文法例を試しましたが、生成されたファイルをコンパイルしようとすると同じエラーが発生します。
たとえば、この質問の解決策を正確にたどりました - GLR_Lib.hs: Could not find module 'System'
文法ファイルの場所
しかし、コンパイルすると次のようになります。
[1/2] ABCData のコンパイル ( ABCData.hs、ABCData.o )
[2/2] ABC のコンパイル ( ABC.hs、ANC.o )
GLR_Lib.hs:164:2: 入力 'case' の解析エラー</p>
この正確なエラーは、私が試したすべての文法で発生しました。私は、例がうまく機能している人々と何が違うのかわかりません。
parsing - Happy を使用した解析関数の適用
次のようなものをどのように解析しますか
の中へ
ハッピーを使っていますか?今、私は言うルールを持っています
しかし、それは上記を次のように解析します
haskell - Haskell Happy 実装の変数への代入
x = 4 と pritn x で言語を実装しようとしています.haskell を使用した構造は満足しています.これまでのところ、このような文法を定義しました.
次のようなものに実行すると
私は得る
実際に実装したいが「代入」の実装方法がわからない
私は haskell が苦手ですが、幸せなドキュメントから「let」の実装を見て、いくつかの環境 p が渡され、評価されるというアイデアを得ました
「割り当て」の実装はこのenvで何かをしなければならないと思いますが、例が見つかりませんでした。assign と print を実装するにはどうすればよいですか? また、その情報や例はどこにありますか?
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 - shift-reduce 競合をなくすために文法を書き直す方法 (Haskell Happy パーサーで)
Happy LALR パーサー ジェネレーターを使用してメソッド (Java のような) の文法を定義しようとしています
ここ、
- MD: メソッド宣言
- VD: 変数宣言
- S: ステートメント
- T:タイプ
- I: 識別子
- E: 式
他のすべてのトークンは端末です。
メソッド内では、変数宣言はステートメントの先頭とその後で行われます。
ご覧のとおり、型が識別子 (I) である型クラスの変数宣言が存在する可能性があるため、VD は I から開始できます。ステートメントは、変数への割り当てと変数名が I であるため、I から開始することもできます
。問題は、VD と S の両方が I から開始できることです。したがって、最初のプロダクションでは、シフト/リデュースの競合が発生します。
この問題を解決するために、文法やその他のパーサー ジェネレーターのトリックを書き直す方法はありますか?
演算子の結合性と優先順位を指定しました。問題を説明するための最小限の情報のみを説明しました。さらに情報が必要な場合はお知らせください。
アップデート:
以下は文法ファイルです
Shift-Reduce の競合と状態の詳細を含む Happy パーサーによって生成された .info ファイル