問題タブ [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 - Shift は幸せな文法で競合を減らします
こんにちは良いプログラマー、
私は幸せな(haskell)で次の文法を構築しました:
これで、While ループには、「do」の後に続くすべてのコマンドが含まれます。この動作を変更するにはどうすればよいですか? 私はすでに %left、%right を試しました... :(
parsing - haskell happy - 「予想される型と一致しませんでした」
Haskell に適したパーサー生成システムのエラー メッセージを理解するのにいくつか問題があります。
たとえば、このコード
正常に動作します。
でもそんなことしたら
巨大なエラー メッセージが表示されます。ですので、ご理解いただけると大変助かります。
前もって感謝します
parsing - (Show ([(String, Int)] -> Int)) のインスタンスがありません
ラムダ式を使用している場合、幸せなプロダクションルールでその場で式の値を計算することはできません。
たとえば、このコード
http://www.haskell.org/happy/doc/html/sec-using.htmlからは機能しません。
または、より正確には、エラー メッセージが表示されました
何を変更しなければならないかを説明していただければ幸いです。
ラムダ式と環境変数 p と関係があるはずです。
データ型を使用しているときは、すべて問題ありません。
javascript - JS: 数字とスペースの正規表現?
私はhappyJSを使用しており、その下の正規表現を電話の検証に使用しています
ただし、これは数字のみを許可します。ユーザーがスペースを入力できるようにしたい
なぜreturn /^(?:[0-9 ]+$)/.test(val);
トリックをしていないのですか?
grammar - 文法にポインタを導入するときの競合を減らす/減らす
自分の言語を作成することの難しさをより深く理解するために、私は小さなコンパイラーに取り組んでいます。現在、文法にポインタ機能を追加する段階にありますが、それを実行することで、reduce/reduceの競合が発生しました。
これは、によってコンパイルできる私の文法の簡略化されたバージョンですbnfc
。私はhappy
パーサジェネレータを使用していますが、これは、reduce/reduceの競合があることを通知するプログラムです。
私は文法がどのように機能するかを学習している段階にあります。しかし、私は何が起こるかを知っていると思います。これらの2つのプログラムを検討してください
と
(typedef
とのmain(){}
部分は関連性がなく、私の文法ではありません。しかし、それらはいくつかの文脈を与えます)
a "*" b
最初のプログラムでは、それがとして解析されることを望みます。Stmt ==(SExpr)==> Expr ==(EMult)==> Expr * Expr ==(..)==> Ident "*" Ident
つまり、基本的にSExpr
ルールを使用してステップを開始します。
同時に、my_type * my_type_pointer_variable
ルールを使って拡張していきたいと思います。Stmt ==(SDecl)==> Type Ident ==(TPointer)==> Type "*" Ident ==(TAlias)==> Ident "*" Ident
。
しかし、文法段階では、識別子が元々型エイリアスなのか変数なのかわかりません。
(1)reduce / reduceの競合を取り除くにはどうすればよいですか?(2)この問題を抱えているのは私だけですか?明らかな解決策はありますか?c文法はこの問題をどのように解決しますか?
これまでのところ、「*」の代わりに「&」またはその他の記号を使用して言語の構文を変更することに成功しましたが、これは非常に望ましくありません。また、さまざまな公開文法からは理解できず、なぜこの問題が発生しないのかを調べようとしましたが、運が悪かったのです。
そして最後に、どうすればこのような問題を自分で解決できますか?より詳細な出力から私が理解したhappy
のは、競合がどのように発生するかということだけです。賢さは、これらの競合を回避する唯一の方法ですか?たとえば、紹介するときに、さらに多くの問題に遭遇するのではないかと心配しています。EIndir. Expr = '*' Expr;
parsing - Parsec または happy (alex を使用) または uu-parsinglib
Verilog (または vhdl) 言語のパーサーを作成し、解析されたデータの多くの操作 (一種の変換) を行う予定です。私は非常に大きなファイル (完全な Verilog デザイン、最大 10,000 行) を解析するつもりであり、最終的にはほとんどの Verilog をサポートする予定です。タイピングは気にしませんが、他のルールのサポートを追加するたびに、コードのどの部分も書き直したくありません。
Haskell で、どのライブラリをお勧めしますか? 私は Haskell を知っており、以前に Happy を (プレイするために) 使用したことがあります。コード内の解析された文字列を変換するために Parsec を使用する可能性があると感じています (これは大きな利点です)。私は uu-paringlib の経験がありません。
Verilog/VHDL の完全な文法を解析するには、どれが推奨されますか? 私の主な関心事は、気まぐれで解析されたデータを操作できる簡単さと「正確さ」です。速度は主要な関心事ではありません。
parsing - Happy の命題論理パーサーでの Shift/Reduce 競合
私は、この命題論理文法のBNF 定義に基づいて、Happy で簡単な命題論理パーサーを作成しています。これが私のコードです。
さて、ここで2つの問題があります
- 何らかの理由で、4 つのシフト/リデュースの競合が発生します。優先順位によって解決されると思っていたので、競合がどこにあるかはわかりません (BNF 文法に正しく従ったと思います)...
- (これはどちらかというと Haskell の問題です) 私のレクサー関数では、何らかの理由で、'¬' をどうするかを記述している行で解析エラーが発生します。その行を削除すると機能します。(この問題は解決済みです)
どんな助けでも素晴らしいでしょう。
haskell - cabal-install は、ハッピーのバージョンを保持しません
私はやろうとしましたが、依存関係cabal install hoogle
にヒックアップがあります:haskell-src-exts-1.13.5
実行しようとするとcabal install happy
、正常に終了したように見えますが、cabal-install はバージョンを保持しません:
ご覧のとおり、バージョンは[ Unknown ]
. cabal install happy
それは不明のままで、再度実行しようとしても cabal-install は無視されたままです。
何を与える?
前もって感謝します!