問題タブ [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 投票する
1 に答える
988 参照

ocaml - パーサー内で解析エラーが発生する入力文字列を取得します

menhir文字列から式ASTへの式を解析しようとするフロントエンドが書かれています。フロントエンドのエントリ ポイントは、Parser_e.main私の OCaml コードのいくつかの異なる場所で呼び出されます。そのため、外部ではなくフロントエンド内で発生する可能性のあるエラーをキャッチできるようにしたいと考えています。エラーをキャッチするときに表示したい特定の重要な情報は、フロントエンドが解析できない入力文字列全体です。(フロントエンドはほとんどすべてを読み取ることができるため、レクサーからのエラーは非常にまれです)。

そこで、このスレッドをたどって、エラーが発生したときに詳細情報を出力しようとしました。にparser_e.mly、追加しました

しかし、まだ入力文字列を情報として持っていません。それを得るために私が欠けている機能がある場合、誰かがいますか?

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

yacc - ocamlyacc での競合のシフト/削減

次のパーサーがあります。

私はそれが完全ではないことを知っています.

この行を追加すると、| expr Bigger expr {$1 > $3}10個のシフト/削減の競合が発生します...しかし、この行を次のように括弧で追加すると:

| LP expr RP Bigger LP expr RP {$2 > $6} LP は「(」を表し、RP は「)」を表します

それは完全に適合し、エラーもシフト/削減の競合もありません

これは問題の正しい解決策ですか? もしそうなら、なぜですか?もう 1 つ質問します。パーサーで何か間違ったことをしていますか? それとも完全ではないだけですか?

ありがとうございます!

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

parsing - 言語用に ocamlyacc を使用してパーサーを作成しようとしていますが、どの型を配置すればよいですか?

私は次のコードにも expr のようなものがあります: int {} | BOOL {} などですが、このパーサーの型に書くべき型が何であるかわかりません。int で動作する電卓の例があり、型は int ですが、私のプログラムには float char 文字列などがあります..ありがとう

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

ocaml - OCAML stdin から複数の引数を取得し、それらを 1 つずつ操作する

私は ocamllex と ocamlyacc を使用してインタープリターを作成しました。レクサーとパーサーは正しく動作しますが、現在のところ、それらすべてとは対照的に、受信した最後の .txt 引数のみを解析します。たとえば、解析とは対照的に、./interpret one.txt two.txt three.txt解析のみが必要です。たとえば、解析結果は次のようになります。three.txtone.txttwo.txtthree.txt

./interpret one.txt two.txt three.txt現在の出力を呼び出すと、次の3ようになります。123

stdinこれが、とを扱う私のメインクラスですstdout

御時間ありがとうございます

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

if-statement - OCamlでyacc NULL?

OCamlyacc と OCamllex で次の文法を実装しています。

私の IF-ELSE 句の OCaml 型宣言は次のとおりです。

OCamlyacc の IF-ELSE 部分を次のように定義できます。

しかし、疑問符がELSE を持たないIF ステートメント(1 行目) のステートメントタイプ (「stmt」)に「NULL」を配置するにはどうすればよいですか? ("exp") と statement が 1 つしかないステートメントタイプにアクセスできません。

「while(0){print(0)}」ステートメントをそこに置くことを考えましたが、それはあなたが想定している方法ではありません。特に、そうすべきではないときにwhile ステートメントで解析するためです。