問題タブ [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.
ocaml - パーサー内で解析エラーが発生する入力文字列を取得します
menhir文字列から式ASTへの式を解析しようとするフロントエンドが書かれています。フロントエンドのエントリ ポイントは、Parser_e.main私の OCaml コードのいくつかの異なる場所で呼び出されます。そのため、外部ではなくフロントエンド内で発生する可能性のあるエラーをキャッチできるようにしたいと考えています。エラーをキャッチするときに表示したい特定の重要な情報は、フロントエンドが解析できない入力文字列全体です。(フロントエンドはほとんどすべてを読み取ることができるため、レクサーからのエラーは非常にまれです)。
そこで、このスレッドをたどって、エラーが発生したときに詳細情報を出力しようとしました。にparser_e.mly、追加しました
しかし、まだ入力文字列を情報として持っていません。それを得るために私が欠けている機能がある場合、誰かがいますか?
yacc - ocamlyacc での競合のシフト/削減
次のパーサーがあります。
私はそれが完全ではないことを知っています.
この行を追加すると、| expr Bigger expr {$1 > $3}10個のシフト/削減の競合が発生します...しかし、この行を次のように括弧で追加すると:
| LP expr RP Bigger LP expr RP {$2 > $6}
LP は「(」を表し、RP は「)」を表します
それは完全に適合し、エラーもシフト/削減の競合もありません
これは問題の正しい解決策ですか? もしそうなら、なぜですか?もう 1 つ質問します。パーサーで何か間違ったことをしていますか? それとも完全ではないだけですか?
ありがとうございます!
parsing - 言語用に ocamlyacc を使用してパーサーを作成しようとしていますが、どの型を配置すればよいですか?
私は次のコードにも expr のようなものがあります: int {} | BOOL {} などですが、このパーサーの型に書くべき型が何であるかわかりません。int で動作する電卓の例があり、型は int ですが、私のプログラムには float char 文字列などがあります..ありがとう
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
御時間ありがとうございます
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 ステートメントで解析するためです。