問題タブ [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.

0 投票する
1 に答える
94 参照

haskell - Happyにバグの可能性はありますか?

私は Happy/Alex を使用してパーサーを作成しています。構文解析している文法は完全にコンテキスト フリーではないため、先読みトークンを取得する必要があります。Happy のドキュメントは、スレッド化されたレクサーを使用する場合、これは次の形式のルールで実行できることを示唆しています。

ルールを書いたので

ただし、これにより ghc が解析できない .hs ファイルが生成されます。GHCは次のエラーを出します:

これは、エラーを生成する haskell 関数です。

mkTypDef = undefined型エラーが発生していないことを確認するためだけに、を残しました。通常のモナド生成 ( を使用{% <expn> }) は問題なく動作します。Happy 1.19.4 と GHC 7.8.3 を使用しています。

これはおそらくバグですか、それとも私が間違っていることがありますか?

0 投票する
1 に答える
251 参照

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>

この正確なエラーは、私が試したすべての文法で発生しました。私は、例がうまく機能している人々と何が違うのかわかりません。

0 投票する
2 に答える
1552 参照

parsing - Happy を使用した解析関数の適用

次のようなものをどのように解析しますか

の中へ

ハッピーを使っていますか?今、私は言うルールを持っています

しかし、それは上記を次のように解析します

0 投票する
1 に答える
460 参照

haskell - Haskell Happy 実装の変数への代入

x = 4 と pritn x で言語を実装しようとしています.haskell を使用した構造は満足しています.これまでのところ、このような文法を定義しました.

次のようなものに実行すると

私は得る

実際に実装したいが「代入」の実装方法がわからない

私は haskell が苦手ですが、幸せなドキュメントから「let」の実装を見て、いくつかの環境 p が渡され、評価されるというアイデアを得ました

「割り当て」の実装はこのenvで何かをしなければならないと思いますが、例が見つかりませんでした。assign と print を実装するにはどうすればよいですか? また、その情報や例はどこにありますか?

0 投票する
1 に答える
223 参照

haskell - ハッピーとアレックスはどのようにして自分自身をブートストラップしますか?

happycontainsAttrGrammarParser.lyおよびcontainsのソースParser.lyツリー。それでも、私が知る限り、 をコンパイルするには、 ... を使用してファイルをファイルに変換する必要があり、コンパイルするには、...を使用してファイルをファイルに変換する必要があります。alexScan.xhappy.ly.lhshappyalex.x.hsalex

したがって、いずれかのツールをコンパイルするには、ここでいくつかのブートストラップが行われている必要があるようです。

各プロジェクトのSetup.lhsファイルにはいくつかのテンプレート拡張が含まれていますが、私が知る限り、ブートストラップを行うために特に何もしていません。

ブートストラップはどこでどのように行われますか?

0 投票する
1 に答える
107 参照

haskell - cabal を正しくインストールしましたか?

こんにちは、コマンドで cabal を最新バージョンに更新しました

その後、それは戻ります

アレックスとハッピーを使いたい。申し訳ありませんが、私はそれに非常に慣れていません..行でghciでalexを発行しようとしたとき

戻る

これをオンラインで検索したところ、最初にバージョンを確認する必要があるというWebページが見つかりました。

しかし、私はこの行を得ました

誰でもこの問題を解決できますか?

0 投票する
2 に答える
615 参照

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 ファイル