問題タブ [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 を使用した switch ステートメントの解析
だから、私はこのようなスイッチステートメントを含むコードを解析しようとしています
と
しかし、私は取得し続けます:
生成されたパーサーを実行すると。ここで奇妙なのは、「case」キーワードの2 番目のインスタンスでは失敗するが、最初の では失敗しないことです。なぜそれが世界であるでしょうか?
parsing - 文法の曖昧さ: なぜ? (問題は: "(a)" vs "(az)")
そのため、1 行のステートメントに対して非常に単純な文法を実装しようとしています。
Happy パーサー ジェネレーター (http://www.haskell.org/happy/) を使用していますが、何らかの理由であいまいな問題があるようです。
エラーメッセージは次のとおりです。「シフト/競合の削減: 1」
あいまいさは次の 2 行にあると思います。
例: "(a)" vs "(az)"
lexer は、2 つのケースに対して次のようになります。
私が理解していないのは、これが LL[2] パーサーでどのように曖昧になるかということです。
ここで役立つ場合は、ハッピー文法の定義全体を次に示します。
ありがとうございました!
parsing - パーサーコンビネーターを使用するのではなく、ハッピーのようなパーサージェネレーターを使用する利点は何ですか?
文脈自由文法の書き方と構文解析の方法を学ぶために、ツールを選びたいと思います。Haskellには、2つの大きなオプションがあります。文法の説明からパーサーを生成するHappyと、Haskellでパーサーを直接コーディングできる*Parsecです。
どちらのアプローチの(不)利点は何ですか?
haskell - Happyの%%は何ですか?
Happyを使用してパーサーを構築していますが、これがオンラインドキュメントであることに気付きました。
yaccのように、本当の理由もなく、ここに%%を含めます。
%%
たとえそれが些細なことであっても、理由があるに違いありません。誰かがそれが何であるか知っていますか?
parsing - "Internal Happy Error" のオーバーライド - notHappyAtAll
Happy を使用してパーサーを生成しています。
トップレベルよりも低いレベルで文法の一部に一致するトークンを与えると(ステートメントの一部ではない独自の式を与えるなど)、「内部ハッピー」を取得することがわかりましたエラー」ではなく、解析エラーです。
notHappyAtAll
「Internal Happy Error」よりも優れたエラー メッセージを出力できるようにオーバーライドする方法はありますか? 明らかに、文法を更新するたびに自動生成されたパーサー ファイルを変更する必要があるためです。
parsing - Happy パーサーの不可解なエラー メッセージ
Haskell でHappyを使用して JavaScript パーサーを作成していますが、どんなに頑張ってもデバッグできないというエラー メッセージが表示されます。
コードは数千行に及ぶため、ここにすべてのコードを掲載することはできません。関連するビットを投稿しようとします。誰かが私を助けることができれば、私は非常に感謝しています!
このエラー メッセージは非常に長いので、ご容赦ください。ほとんどの部分を省略しましたHappyAbsSyn
。それが助けになるなら、私は完全なエラーメッセージを提供することができます.
わかった?わかりましたので、最初に行ったのは、Parser.hs (Happy によって生成されたファイル) の 800 行目です。
action_90
と定義されている:
これは、コードが何に対応しているかを理解しない限り、あまり意味がありません。コンパイル時に情報ファイルを生成するよう Happy に依頼しましたが、これは (私が思うに) 適切な部分です。
IDステートメントと関係があるようです。この点で、私は本当にかなり混乱しています。ここからどこへ行くべきかについて誰か提案がありますか? これを解決するには、抽象構文を確認する必要があると思います。これがその一部です。繰り返しますが、お役に立てば幸いです。
長くなってすみません。私はここで頭がいっぱいです。どんな助けや指針も素晴らしいでしょう。
javascript - Happyパーサーで正規表現を照合するにはどうすればよいですか?
Happyを使用してJavaScriptパーサーを作成していますが、正規表現に一致させる必要があります。正規表現を完全に解析するのではなく、文字列として保存するだけです。
私のASTの関連部分は次のようになります:
これは関連するハッピーコードです:
私の質問は、非終端記号をどのように定義する必要があるかということregex
です。このような構造は正しいですか?
haskell - Happyでのシフト/競合の削減
if-then[-else] ケースを解析するための正しいルールを作成するにはどうすればよいですか? ここにいくつかの文法があります:
この文法は、次の式を正しく解析します。
ただし、コンパイルすると、シフト/削減の競合に関する警告が発生します。幸福へのドキュメントには、そのような競合の例が含まれています: http://www.haskell.org/happy/doc/html/sec-conflict-tips.html
示されている解決策は 2 つあります。1 つ目は、再帰型を変更することです (この場合の方法は明確ではありません)。2 つ目は、何も変えないことです。このオプションは私には問題ありませんが、相談が必要です。
haskell - 幸せ:対立を減らす/減らす
なぜこれが競合の削減/削減に関する警告を発するのか
しかし、次は大丈夫ですか?
java - HaskellでJavaの構文強調表示を作成するには?
すぐに、Java 構文の強調表示を行うことになっている Haskell のプロジェクトを提示することを余儀なくされるでしょう。私はいくつかの調査を行い、Happy が解決策になる可能性があることがわかりました (yacc のようなパーサーであるため)。また、バイソンとパーセクについても言及されていました。私は Haskell が初めてなので、このプロジェクトを開始する方法がまったくわかりません。どんなヒントでも大いに役立ちます。
ありがとう!