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

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

compiler-construction - OCaml タイプに互換性がない - OCamlyacc

エラーを返します: エラー: この式には文字列リスト型 -> 文字列リスト型がありますが、文字列リスト型 -> 文字列リスト リスト型の式が予期されていました。文字列型は文字列リスト型と互換性がありません

どうにかして func をリストに入れる必要があると思いますが、私が試したすべての方法はうまくいかないようです! どんな助けでも感謝..

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

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 競合の一般的な背景を理解しています。この解析の課題を解決するために交渉する方法がわかりません。

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

parsing - セマンティック アクションの実行時に Ocamlyacc トークンが表示されない

ocamlyaccほとんどの解析ルールでいくつかのセマンティック アクションも実行する小さなパーサーに使用しています。

最初に一連のトークンを定義しました。

セマンティック アクションを実行するパーサー ルールは次のとおりです。

checkType外部ヘルパー関数です。ただし、この奇妙な警告が表示されます (Parser.mlyファイル内の行を参照しています) 。

ocamlyacc マニュアルに関連情報が見つかりませんでした。誰かが同様のエラーに遭遇しましたか? セマンティック アクションのスコープ内でトークンが表示されないのはなぜですか?

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

ocaml - Ocamlyacc で認識されないルールを定義する方法

私は会社のプロジェクトに取り組んでおり、Ocamlyacc と Ocamllex を使用して言語のコンパイラを作成する必要があります。Ocamlyacc パーサーで、入力の構文に一致する文法のルールがないことを示すルールを定義できるかどうかを知りたいです。

私は Ocamllex/Ocamlyacc の初心者であることを主張しなければなりません

大変お世話になりました。

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

ocaml - パーサーとレクサーを組み合わせたプログラムの作り方

Ocamllex/Ocamlyacc を使用してコンパイラを構築し、OcamlParser と OcamlLexer の両方を結合するメイン プログラムを作成したいと考えています。問題は、次のコードのようなコマンドラインでの入力を使用してそれを行う方法を知っているということです:

しかし、ファイルを入力として使用したい場合はどうすればよいですか。私はこのようなことを試しました:

しかし、実際には機能していません。

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

compiler-construction - オペレーター :: OCaml

私は OCaml の初心者で、パーサーを作成しようとしています。クラスのすべてのメソッドを格納するリストが必要です。これは、.mly ファイルにある一部です。

ここで何が起こっているのかを正確に説明できる人はいますか? 特に :: 操作。グーグルで検索しましたが、ドキュメントでオペレーターを見つけることができませんでした。

リストが空である可能性があること、またはクラス内のすべてのメソッドでリストを埋めるために適切な再帰呼び出しを行うことがわかりました。method_declメソッドを表す特定のトークンの組み合わせの一致を探すだけです。

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

parsing - shift-reduce 解析の問題を解決しようとしています

C の文法を書こうとしていますが、よくわからない問題が発生しています。文法の関連部分:

これはうまくいきません。ocamlyacc -v を実行したところ、次のレポートが得られました。

シフト/リデュースの競合は文法の仕様のあいまいさが原因であると読みましたが、あいまいではない方法でこれを指定する方法がわかりませんか?

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

ocaml - OCaml 関数の適用の優先順位と結合性

私の OCaml パーサーでは、関数適用に高い優先度と左結合性を与える必要があります。私はそれが一致するさまざまなトークンをたくさん持っています

そして、これらすべての優先順位と結合性を , を使用して与えました%left...rightただし、exp一致させるために使用しているのはトークンではないため、この場合はどうすればよいか疑問に思っていました:

のすべての一致がexpあり、さまざまな exp1 exp2 などを作成していないためexp exp、最高の優先順位を付けて関連付けを残すことが可能かどうかを知りたいです。

これをクラスの別のフォーラムに投稿したところ、次のようになりました。

次のように、ダミー トークンを関数適用規則に関連付けることができます。

次に、%left とダミー トークンを使用して結合性を指定します。

しかし、これが何を意味するのかよくわからないので、誰かがこれについて詳しく説明したり、素晴らしい別の解決策を教えてくれたりできれば.

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

ocaml - 空の文字列を持つ ocamlyacc

したがって、空の文字列を含む文法があります。文法は次のようなものです。

S->ε

S->式 ;; S

パーサーを実行すると「破棄する状態はもうありません」というエラーが表示されるので、空の文字列を正しく表現していないと思います。では、具体的には lexer .mll ファイルでどのように表現すればよいのでしょうか?

ルールを作る必要があることはわかっているので、それを書き留めていると思います。これは、表現のためのものを除いて、パーサー .mly ファイルのように見えるべきだと私が思うものです。