問題タブ [ocamllex]

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 に答える
124 参照

ocaml - 複数のレクサーに同じ ident 定義を共有させることは可能ですか?

私はいくつかのレクサーを持っています: lexer_1.mll, lexer_2.mll, ...

ident( )の一部の定義let ident = regexpは共通であり、これらのファイルで繰り返されます。たとえば、INTEGERFLOAT、 ...の定義

.mllそれらをどこかで一度だけ定義して、ファイルにそれを呼び出させることが可能かどうかを誰かが知っていますか?

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

parsing - .mly と .mll を分けてパースの一部を取り出す

ファイルのセットを解析するフロントエンドをtxt作成しています。各ファイルには一連の が含まれていproceduresます。たとえば、1 つの txt ファイルは次のようになります。

syntax.ml内容:

parser.mly次のようになります。

procedure_declarationここで、 (例外処理の目的で)の解析を取得したいと思います。つまり、 and を作成parser_pd.mlylexer_pd.mllparser.mlycallを呼び出しますparser_pd.main。したがって、parser_pd.mly次のようになります。

以前のコンテンツのほとんどはparser.mlyに移動する必要があるためparser_pd.mlyparser.mly以前よりもはるかに軽くなり、次のようになります。

??????問題は、その部分の書き方がわからないことであり、lexer.mllどちらが軽くなければならないかということです ( token ENDSUBandのみを読み取り、EOSによって処理されるコンテンツを許可するためlexer_pd.mll)。おそらく、Lexingモジュールのいくつかの機能が必要ですか?

私の質問が明確であることを願っています...誰か助けてくれますか?

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

parsing - トークンを含むテーブルを .mly と .mll の両方で見えるようにする

keyword_tableいくつかの文字列をいくつかのトークンにマップする を定義したいと思います。また、このテーブルを と の両方parser.mlyで表示できるようにしたいと考えていますlexer.mll

でテーブルを定義する必要があるようですparser.mly

lexer.mllただし、たとえば、では使用できませんでした

誰が問題がどこにあるのか教えてもらえますか? parser.mlyと の両方でデータを可視化することはできませんlexer.mllか?

0 投票する
0 に答える
80 参照

ocaml - ocamllex で式の一部のみを文字列に一致させる方法

ルールセクションが次のように見える単純な ocamllex プログラムがあります-

私の質問は、「Inc of var of int」である抽象構文に変換できるように、Inc(X(7)) と一致させたいとします。Inc(X(7)) の読み取り中にレクサーに個別の文字列を提供してもらいたいので、「Inc」を差分文字列 (inb など) として取得し、その後に「X」を差分文字列 (inc など) n として取得します。 "7" を diff 文字列 (ind など) として使用すると、プログラムで指定されているように、文字列 ine 全体に固執する代わりに、これらの文字列 inb、inc、および ind をいじることができます。これについてどうすればいいですか?私の質問が明確であることを願っています

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

ocaml - OCamllex で StringMap を使用する

リストから単語の文字列マップを作成する OCamllex パーサーを作成しようとしています。ただし、ヘッダーで StringMap モジュールを開こうとすると、「Unbounded module」エラーが表示されます。

モジュールを明示的に開かずにトレーラー内でマップを作成しようとすると、同じエラーが発生します。

すべての OCaml チュートリアルは、私が正しい構文を使用していることを示唆しています。おそらく私は OCamllex(?) を誤用しているのかもしれませんが、ヘッダー、ルール、およびトレーラーの範囲が明確ではありません。ドキュメントで解決策を探しましたが、OCamllex を対象としたチュートリアルはほとんどありません。私が間違っていることを推測できる人はいますか?OCamllex では StringMap モジュールを使用できますか?

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

compiler-construction - Ocaml のエラー E

Ocamlでクラスのコンパイラをやっています。「1」のようなコマンドまたは式を含むファイルを読み取る必要があり、Int 1 が返されます。同じコードが、私と友人以外のクラス全体で機能しました。誰もが同じバージョンの ocaml と Ubuntu 13.04 を使用しています。エラー: Lexico.Eof

誰かがこれが何であるかについて何か考えがありますか? これは asa.ml です:

これは Sintatico.mly です。

Lexico.mll:

carregatudo.ml という名前のファイルを呼び出すコードは次のとおりです。

ポルトガル語について申し訳ありません:

arquivoはファイルを意味します

Lexico はレクサーを意味します。

Sintatico はパーサーを意味します

最初に、コマンド make interpretador を使用してこの makefile を実行します。

次に carregatudo.ml: #use "carregatudo.ml";;

次の関数: analisa_arquivo("teste.pt");;

入力ファイル teste.pt は次のようになります。

そしてリターンは

しかし、私はエラー Lexico.Eof を取得し続けます

ありがとうございました!

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

ocaml - OCamllex: 正規表現

現在、私は Ocaml でインタプリタを書こうとしていますが、これは私の lexer.mll です:

なぜ ocamllex が { FILE_NAME lxm } 行でエラーを表示するのか、私は本当に混乱しています。レクサーの先頭に置く#load "str.cma"と、その行にエラー構文エラーが出力されます。

なんで?私はかなり混乱しています...

編集

する必要があります[ [^\\]*\.(\w+)$ ] as lxm { FILE_NAME lxm }

しかし、問題はまだ解決されていません...

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

ocaml - OCaml Interpreter: インタープリターがファイル内の 1 行しか実行しない理由

パーサーとレクサーをコンパイルするために、ocamlyacc と ocamllex を使用してインタープリターを作成しています。

私の問題は、ファイル calles テストがあり、lexer で定義されている 2 つのコマンドが含まれていることです。

しかし、インタープリターは行print aのみを実行します! 問題は主にパーサーにあり、再帰する必要があることはわかっています。このように修正しました(以下のコード)が、それでも機能しません。

編集

これは私のレクサーです。エラーを見つけるために、できるだけ単純化しようとしました。

Main.ml