問題タブ [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.
parsing - menhir と sedlex の併用
何らかの理由 (utf-8) で sedlex で menhir を使用する必要がありますが、生成されたパーサーを のSedlexing
代わりに依存させる方法がわかりませんLexing
。任意のヒント?
私が走るとき
生成されたプログラムにはLexing...
. 手動で変更することもできますが、別の方法があるはずですよね?
ocaml - OCaml Menhir: エラー時に最後の状態を出力する
パーサー エラー メッセージを生成しようとしています。これを行うには、最後のトークンと最後の状態を使用したいと考えています。
このメソッドを使用して、最後のトークンを出力できます。
ただし、状態は Menhir によって生成されるため、Menhir のソースを改ざんせずにエラー時に最後の状態を出力する方法を見つけられませんでした。
Menhir生成パーサーからプログラムで状態を抽出する方法はありますか? すなわち、エラーが発生した状態を出力します。エラートークンが生成される状態。
ocaml - OCaml + Menhir: tuple-pattern のように OCaml を解析するには?
メンヒル初心者です。OCaml によく似た自分の言語で OCaml をタプル パターンのように解析する方法を考えています。
たとえば、式let a,b,c = ...
では、
のa, b, c
ように解析する必要がありますTuple (Var "a", Var "b", Var "c")
。
ただし、次のパーサーの定義では、上記の例は として解析されTuple (Tuple (Var "a", Var "b"), Var "c")
ます。次の定義を修正して、ocaml のようなパターンを解析する方法を考えています。
OCaml の parser.mly を確認しましたが、それを実装する方法がわかりません。私の定義は OCaml の定義に似ていると思います... 彼らはどんな魔法を使っているのでしょうか?
結果は次のとおりです。
parsing - OCaml Menhir: 文法が機能していません
私は menhir を使用して、ML での最新のコンパイラの実装で説明されている Tiger 言語を定義しています。マニュアルは次のとおりです。
ただし、この文法は string like は認識しませんa[3]
が、 は認識しa.b
ます。
次に、左辺値に別のルールを追加します
今、私の文法は認識しますa[3]
が、認識しませんa[r]
これは私にはとても奇妙に思えます。a[3]
元の文法では認識できない、認識できないのはなぜですかa[r]
?
アップデート
これが私の文法です:
レクサー:
およびast.ml
ocaml - corebuild による OCaml コンパイル
現在、次のファイルを含むプロジェクト (Python コンパイラに移動) があります。
依存関係は次のとおりです。
私が読んだドキュメントに従って動作するはずの次のことをコンパイルしようとします:
ast.ml には、私が持っている型宣言のリストが含まれています
ocamlfind、corebuild、ocamlopt のドキュメントを読むのに数時間を費やしましたが、何もありませんでした。ある時点で、単なる偶然のように思えてコンパイルされ、二度と機能しなくなりました。どんなツールを使っても構いません。
これがparser.mlyの内容です
そして、これがエラーメッセージで参照されている最後の行です。
compiler-construction - エラー: Menhir と OCaml を使用して空の言語を生成します
私は現在、OCaml と Menhir を使用して Pascal パーサーに取り組んでいます。次のコード スクリプトレットを含む parser.mly をコンパイルすると、Menhir は単に「警告: if_cmd は空の言語を生成します」と言うだけです。間違っています)が、論理的には、到達するはずでした。この警告が発生する理由がわかりません。たとえば、次のステートメントで parser.mly で指定された文法の入力ファイルを使用するとします。
それは私に望ましい答えを与えます。しかし、これを入力として使用すると
それはException: Syntax.Error
、おそらくその警告のために述べています
これらの 4 つの次のファイルを同じフォルダー内で使用して、前述の警告ocamlbuild -use-menhir main.byte
を生成するコマンドを使用しました
lexer.mll
parser.mly
ast.ml
main.ml
ocaml - ドル + ミリ単位の識別子
私は型チェッカーの$startpos
と$endpos
を見ます:.mly
$
+の意味を教えてくださいidentifier
。それらは関数ですか、それとも変数ですか? それらの値はどのように供給されますか?