問題タブ [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 - アレックス、ハッピー、カバル、再前処理
私は Alex 3.0.5、Happy 1.18.10、Cabal 1.16.0.2 を使用しています。
Cabal を使用して構築された小さなコンパイラ プロジェクトがあります。コンパイラの内部をライブラリとして公開しているので、公開モジュール セクションに MyLangLex と MyLangPar があります。Alex と Happy によって生成された .hs ファイルを削除してから cabal configure を実行すると、cabal build は最初に Alex と Happy を実行し、ファイルを生成してからビルドを続行すると、すべてが期待どおりに機能します。ただし、これらのファイルを削除しないと、Alex と Happy はファイルを作成しないか、適切な場所に配置しません。Happy からのメッセージが表示されるので、Happy が実行されると思います。ただし、生成されるはずの .hs ファイルを見ると、正しくありません (変更されていません)。Cabal がビルドで使用する hs ファイルは、変更されるべき動作が変更されていないため、間違ったファイルです。つまり、.y ファイルへの変更はビルドされたプログラムに組み込まれていないため、Happy が実行されている間、Cabal はこのファイルを一時ディレクトリに置き、古い .hs ファイルを使用していると思われます。建てる。しかし、これについてはよくわかりません。
エラーは私の側にあるのでしょうか、それともツールの 1 つが正しく動作していないのでしょうか?
haskell - GLR_Lib.hs: モジュール 'System' が見つかりませんでした
happy から GLR パーサーを生成しようとしていますが、ファイルが生成されるとエラーが発生します。
これが ABC.y の例なので、私が何をしようとしているのかは明らかです:
この例は、
ただし、 --glr に満足しているため、結果をビルドできません。私はそれを間違っているのだろうかと思っています。正確に言うと、 --glr を実行すると、ABC.hs という 2 つの出力が生成されます。ただし、ABCData.hs
今失敗します。私が得るエラーは、「Could not find module 'System', It is a hidden member of haskell-98...」です。また、文法を BNFC にコーディングして -glr オプションを使用しようとしましたが、明らかに廃止された Data.FiniteMap への依存など、他のエラーが発生します。このコンパイルを取得する方法はありますか?
haskell - "cabal install happy" はメモリ オーバーフローを引き起こします。(GHC 7.8.2)
私は過去数日間、正しくインストールすることに満足しようとしてきました.cabal install happy
エラーだけでなく ( をインストールhappy-1.19
しapt-get
てに追加/opt/happy/1.19.3/bin
することによってPATH
) に到達するのは難しいと感じましたが、今ではProduceCode
(15 /18) となり、無限ループに陥っているようです。Ctrl+C
システム全体が応答しなくなったときに、ヒットするか電源を切るまで、メモリが蓄積されます。
これは GHC-HEAD ではまったく問題にならなかったことを覚えていると思いますが、head は数日ごとに更新されるように見えるため、使用したくありません。トリックがない限り、常にパッケージを再ビルドする必要があります。からhead
への移行については不明head+1
です。
haskell - Haskell 'let' の実装
Haskell.Happy のドキュメントを読んで、'let' 演算子の実装にたどり着きました
docs は、「変数値の環境を取り、式の計算値を返す関数」であると述べています。
構文の実際の意味を理解できません。これらの構造は Haskell でどのように呼び出されますか?
編集:私はこれらを意味します
parsing - Happy with GLR モードでシンボルを開始
幸せな文法を定義するとします
これをコンパイルすると
私は一般的に、自明でないあいまいさを持つ文法に興味があります。ただし、この例は、私を混乱させているビットを示しています。
Haskell パーサーを取得します。トークン ストリームが abba または b の場合にのみ成功します
しかし、私は失敗にもっと興味があります。私は非常に早く失敗したいと思っており、必要と思われるよりも多くのトークンが必要なようです。
たとえば、トークン ストリーム a,a,a をフィードすると、失敗するのに 3 番目の a が必要です。bbb をフィードすると、失敗するのに 3 番目の b までかかります。余分な先読みはなぜですか?f を一致させるとき、2 つの 'a' が表示されると、一致する文法はありません。
installation - cabal 経由で haskell-src-exts をインストールする GHC の非互換性
cabal install agda
Ubuntu 14.04 で GHC 7.8.3 と Cabal 1.16.0.2 を使用しようとすると、互換性の問題が発生します。
問題はhaskell-src-exts-1.15.0.1
、Agda が必要とする にあるようです。そのライブラリをコンパイルすると、バージョン 7.8 での GHC の変更とHappyで生成されたコードとの互換性がないことが原因で (私は信じています) 、次のよく知られた問題に遭遇します。
上記の記事では、互換性のない Happy 生成コードを含むライブラリをクリーンアップして再構築する方法について説明しています。しかし、haskell-src-exts-1.15.0.1 ではこれを機能させることができませんでした。特に、しようと
同じ問題に遭遇します。
助言がありますか?
parsing - Happy の間違った演算子の優先順位
Haskell で解析ライブラリを調べていると、このプロジェクトに出くわしました: haskell-parser-examples。いくつかの例を実行すると、演算子の優先順位に問題があることがわかりました。Parsec を使用すると問題なく動作します。
しかし、ハッピー/アレックスではそうではありません:
演算子の優先順位は明確に定義されているように見えますが。パーサーからの抜粋:
ヒントはありますか?(しばらく前にバグレポートを開きましたが、応答がありません)。
[gch 7.6.3、alex 3.1.3、happy 1.19.4 を使用]
haskell - Happy の残りの入力を省略 (Haskell のパーサー ジェネレーター)
パスカルの文法によれば、プログラムはドットで終わります。あと何かあるとフリーパスカル(FPC/Lazarus)は残りの文字を省略します。
同様の動作が必要です。私はカスタムのモナド トークナイザーを使用していますが、それは怠惰なので、メイン ルールが成功したときに Happy が継続を呼び出さないようにしたいだけです。
基本的に、私はこのようなものを望んでいます:
エラーが発生する可能性があるため、この最後のドットが解析された後はトークン化をまったく行わないことが重要です。