問題タブ [menhir]

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 投票する
1 に答える
101 参照

compiler-construction - ソースコードの位置情報をフロントエンドに追加する

特定の言語のプログラムのフロントエンドを含む静的アナライザーを作成しています。

フロントエンドはプログラムから AST を生成することに成功し、その上でアナライザーが適切に動作します: プログラムが (特定のプロパティに対して) 正しいことを証明するか、ステートメントまたは式に対してエラーを発生させます。

エラーの場合は、エラーメッセージを明示したいと思います。したがって、エラーが発生したステートメントまたは式localisationソース コードに正確なコードを追加したいと考えています。見せるのline numberはもういい、見せるのrow numberはもっといい…

これを行うためにフロントエンドを変更する方法を誰か教えてもらえますか? または、勉強できるドキュメントはありますか?

(最初に AST の型を変更する必要があると思いますが、locすべてに追加する必要がありますか?)

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

ocaml - より大きなレキシコンのために ocamllex を展開します

より多くのキーワードで ocammlex を動作させる方法はありますか? 私はドイツ語用のインタープリターとパーサーを作成しました。これは、言語分析のためにドイツ語のテキストをラテックス画像に「コンパイル」します。それは本当にうまく機能し、言語学の世界では本当に新しいものです。ocamllex や menhir などのツールをそのような目的で悪用できることを、ocaml のすべての開発者に感謝します。しかし、すぐに辞書のサイズによる ocammlex-automaton の限界に到達します。

私はハッシュテーブルの解決策を知っています。それが今後の問題を解決するかどうかはまだ試していませんが、ocamllex-source-codeの制限整数などのタイプを簡単に変更できる場合、プログラムコードを変更せずに誤用できることを誰かが知っていますか? ? 私の意見では、自動化のサイズに関するこのエラーは不必要にばかげており、さらに悪用するには扱いにくいので、質問したいと思います。

ありがとう、良い一日を。

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

parsing - 一見同等の Menhir ルールは、文法に見られるシフト/リデュースの競合を変更します

Menhir を使用してパーサーを作成していますが、常につまずく動作があり、理解できません。それを示すために、次の最小限の例を作成しました。これは、Go 言語 ( http://golang.org/ref/spec#Method_declarations )のメソッド宣言でのレシーバー引数の宣言を示しています。

私が見る限り、両方のルールは意味的に同等です。オプションの識別子 (レシーバーの名前)、オプションのスター (ポインターかどうか)、および必須の型名 (レシーバーの型) を探しています。ただし、最初のルール (コメント アウトされたルール) ではシフト/リデュースの競合が発生しますが、2 番目のルールは正常に機能します。

これが発生するたびに複数のルールに置き換えることでパーサーを進歩させることができましたがoption、なぜそれが起こっているのか理解できないことに悩まされています.

(menhir を知らない場合、これは LR(1) パーサー ジェネレーターなので、他の同様のツールがどのように機能するかについての知識がおそらく適用されます。)

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

ocaml - ocaml menhir - 単純な文法のストリーム競合の終わり

(+、-、​​、/ 演算子) を使用して非常に単純な式パーサーを生成するために Menhir を試していますが、ストリームの競合が終了します。文法は次のとおりです。

私が得る警告は次のとおりです。

この警告を防ぐにはどうすればよいですか?

これは、menhir によって生成された.automaton ファイルです。

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

ocaml - OCaml でのデータ フレームの実装

私は独学で OCaml を学んでいて、この言語に本当に感銘を受けました。練習用の小さな機械学習ライブラリを開発したかったのですが、問題が発生しました。

Python では、Pandas を使用してデータ ファイルをロードし、それを Scikit-Learn などのライブラリに簡単に渡すことができます。同じプロセスを OCaml でエミュレートしたいと思います。ただし、OCaml にはデータ フレーム ライブラリがないようです。「ocaml-csv」をチェックしましたが、実際には望んでいるようには見えません。Haskellの「フレーム」も調べましたが、TemplateHaskellを使用していますが、Pandasがコンパイル時のメタプログラミングなしでデータファイルをメモリにロードするだけでよい場合、同じことを行うより簡単な方法が可能になるはずです。Pandas または R でデータ フレームがどのように実装されているかを知っている人はいますか? Google で簡単に検索しても、有用なリンクが返されないようです。

Menhir などのパーサー ジェネレーターを使用して CSV ファイルを解析することはできますか? また、静的型付けがデータ フレームでどのように機能するかはわかりません。

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

ocaml - 架空のプログラミング言語の解析中にエラーが発生しました

私が作ったプログラミング言語の言語インタプリタに取り組んでいます。これは、動作するはずのコードの例ですが、Syntax error at offset 45.このテストケースを読むと現在停止しています。

正しい解釈は、最初の行で foo を使用してマップを作成し、それを foo という名前の変数に格納し、2 行目でレコード foo のフィールド min の値を検索し、開始/終了のカーリーをセミコロンで囲みます。 2 つの式を 1 つのexpr_seq(つまり、ブロック) に変換すると、その中の最後のものと同じものに評価されexprます。

私の parser.mly の簡略版は次のとおりです。

自分でデバッグしようとすると、次の| v = VAR LBRACK f = q_var RBRACK ASSIGN e = expものを削除すると解析されて正しく実行されることがわかりましたが、マップに設定できるようにしたいと思っています。

問題が mly ファイルにあることは 98% 確信していますが、単純化したバージョンの lexer.mll は次のようになります。

シンプルな ml ファイルは次のとおりです。

編集: ここに Makefile があります。parser.mly、lexer.mll、および interpreter.ml は、上記の 2 番目、3 番目、および 4 番目のファイルです。

ここで、test.in が上記の最初のものです。

編集2:| e = VAR LBRACK v = q_var RBRACK { GetMap(v,LookupVar(e)) } パーサーに特別なケースとして追加するだけになりました。それで、問題は解決しましたか?