問題タブ [ocamlyacc]
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.
compiler-construction - OCaml タイプに互換性がない - OCamlyacc
エラーを返します: エラー: この式には文字列リスト型 -> 文字列リスト型がありますが、文字列リスト型 -> 文字列リスト リスト型の式が予期されていました。文字列型は文字列リスト型と互換性がありません
どうにかして func をリストに入れる必要があると思いますが、私が試したすべての方法はうまくいかないようです! どんな助けでも感謝..
yacc - 中置セクションとのシフト/競合の削減
Haskell のように、通常の中置操作と中置セクションを含む文法の yacc のような実装 (特に ocamlyacc を使用) に問題があります。私はこれらすべてが文法的であることを望みます:
ただし、結合性/優先順位の宣言をいじっても、これを機能させることができませんでした。問題が発生している場所は grammar.output で確認できますが (削減したい場所に移動しています)、思い通りに進むように誘導することはできませんでした。これは、問題の単純化されたデモンストレーションです。
lex.mll には次のものがあります。
main.ml には次のものがあります。
そしてparse.mly(問題があるところ)には次のものがあります:
それを実行ocamlyacc
すると、 があることがわかります1 shift/reduce conflict
。特に、詳細ログの関連部分は次のとおりです。
コンパイルされたプログラムを実行すると、次のすべてが正しく解析されます。
しかし、次のように失敗します:
一方、HIGH
優先度の高いダミー トークンを作成する場合:
次に%prec HIGH
、ルール 9 を適用します。
その場合(1+2)
は解析しますが、し(1+)
ません。
shift/reduce 競合の一般的な背景を理解しています。この解析の課題を解決するために交渉する方法がわかりません。
parsing - セマンティック アクションの実行時に Ocamlyacc トークンが表示されない
ocamlyacc
ほとんどの解析ルールでいくつかのセマンティック アクションも実行する小さなパーサーに使用しています。
最初に一連のトークンを定義しました。
セマンティック アクションを実行するパーサー ルールは次のとおりです。
はcheckType
外部ヘルパー関数です。ただし、この奇妙な警告が表示されます (Parser.mly
ファイル内の行を参照しています) 。
ocamlyacc マニュアルに関連情報が見つかりませんでした。誰かが同様のエラーに遭遇しましたか? セマンティック アクションのスコープ内でトークンが表示されないのはなぜですか?
ocaml - Ocamlyacc で認識されないルールを定義する方法
私は会社のプロジェクトに取り組んでおり、Ocamlyacc と Ocamllex を使用して言語のコンパイラを作成する必要があります。Ocamlyacc パーサーで、入力の構文に一致する文法のルールがないことを示すルールを定義できるかどうかを知りたいです。
私は Ocamllex/Ocamlyacc の初心者であることを主張しなければなりません
大変お世話になりました。
ocaml - パーサーとレクサーを組み合わせたプログラムの作り方
Ocamllex/Ocamlyacc を使用してコンパイラを構築し、OcamlParser と OcamlLexer の両方を結合するメイン プログラムを作成したいと考えています。問題は、次のコードのようなコマンドラインでの入力を使用してそれを行う方法を知っているということです:
しかし、ファイルを入力として使用したい場合はどうすればよいですか。私はこのようなことを試しました:
しかし、実際には機能していません。
compiler-construction - オペレーター :: OCaml
私は OCaml の初心者で、パーサーを作成しようとしています。クラスのすべてのメソッドを格納するリストが必要です。これは、.mly ファイルにある一部です。
ここで何が起こっているのかを正確に説明できる人はいますか? 特に :: 操作。グーグルで検索しましたが、ドキュメントでオペレーターを見つけることができませんでした。
リストが空である可能性があること、またはクラス内のすべてのメソッドでリストを埋めるために適切な再帰呼び出しを行うことがわかりました。method_decl
メソッドを表す特定のトークンの組み合わせの一致を探すだけです。
parsing - shift-reduce 解析の問題を解決しようとしています
C の文法を書こうとしていますが、よくわからない問題が発生しています。文法の関連部分:
これはうまくいきません。ocamlyacc -v を実行したところ、次のレポートが得られました。
シフト/リデュースの競合は文法の仕様のあいまいさが原因であると読みましたが、あいまいではない方法でこれを指定する方法がわかりませんか?
ocaml - OCaml 関数の適用の優先順位と結合性
私の OCaml パーサーでは、関数適用に高い優先度と左結合性を与える必要があります。私はそれが一致するさまざまなトークンをたくさん持っています
そして、これらすべての優先順位と結合性を , を使用して与えました%left
...right
ただし、exp
一致させるために使用しているのはトークンではないため、この場合はどうすればよいか疑問に思っていました:
のすべての一致がexp
あり、さまざまな exp1 exp2 などを作成していないためexp
exp
、最高の優先順位を付けて関連付けを残すことが可能かどうかを知りたいです。
これをクラスの別のフォーラムに投稿したところ、次のようになりました。
次のように、ダミー トークンを関数適用規則に関連付けることができます。
次に、%left とダミー トークンを使用して結合性を指定します。
しかし、これが何を意味するのかよくわからないので、誰かがこれについて詳しく説明したり、素晴らしい別の解決策を教えてくれたりできれば.
ocaml - 空の文字列を持つ ocamlyacc
したがって、空の文字列を含む文法があります。文法は次のようなものです。
S->ε
S->式 ;; S
パーサーを実行すると「破棄する状態はもうありません」というエラーが表示されるので、空の文字列を正しく表現していないと思います。では、具体的には lexer .mll ファイルでどのように表現すればよいのでしょうか?
ルールを作る必要があることはわかっているので、それを書き留めていると思います。これは、表現のためのものを除いて、パーサー .mly ファイルのように見えるべきだと私が思うものです。