問題タブ [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 に答える
262 参照

ocaml - コンテキストに依存するトークンの意味

区切り文字の意味がコンテキストに依存する奇妙な文字列構文があります。次のサンプル入力では:

結果は 2 つの文字列のリストです["foo"; "bar"]。括弧の外側のペアはリスト モードに入ります。次に、次の括弧のペアが文字列を区切ります。文字列内では、バランスの取れた括弧のペアが文字列の一部として扱われます。

現在、レクサーはグローバル変数に応じて何を返すかを決定しますinside

区切り文字は括弧です。レクサーが左括弧にヒットした場合、

  • insidefalseの場合、 Enterトークンを発行し、 trueinsideに設定されます。
  • insidetrue の場合、適切にネストされた括弧のペアを文字列の一部として扱う文字列レクサーに切り替えます。ネスト レベルがゼロに戻ると、文字列バッファーがパーサーに渡されます。

閉じ括弧が文字列の外側にある場合、Leaveトークンが発行され、inside設定が解除されます。

私の質問は次のとおりです。グローバル変数なしでレクサーを書き直すにはどうすればよいですinsideか?

Fwiw 私は menhir を使用していますが、ocamlyacc でも同じことが言えます。(これが混乱しているように聞こえる場合は、申し訳ありません。私は yacc/lex アプローチの初心者です。PEG として考えなくても上記のすべてを表現できますが、精神的にレクサーとパーサーを分離しておくことに慣れていません。遠慮なく指摘してください。コードの他の問題を解決してください!)

簡単な例: *sample_lexer.mll*

*sample_scanner.mly*:

main.ml :

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

ocaml - Ocamllex構文上の問題

主な機能の仕組みを教えてもらえますか?正規表現の部分を理解し、主な機能を理解することはできますが、正確な意味はわかりません。

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

syntax - Ocamllex - 文字の違いは何ですか? ( # )

#2 つの文字または文字セットの違いである ocamllex を持つ演算子があります。

ここで、私には理解できない概念があります。それは文字の違いです。文字の違いとはどういう意味ですか? だから誰かが私を説明できるなら、私はそれを取る!

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

ocaml - ocamllex によって生成されたファイル

理論によると、lex ツール (私は ocamllex を読みました) について、正規表現のコレクションを DFA (実際には NFA と NFA2DFA) の C (OCaml) コードに変換します。DFA M の正式な定義は、5 つのタプル M = {Q, Sigma, transition_function, q0, F} です。生成されたファイルで見つけたのは次のとおりです。

  • Lexing モジュールのフィールドを持つ __ocaml_lex_tables というレコード
  • 再帰関数

DFA のオブジェクト/構造と ocamllex によって生成された構造の間にマッピングがありますか? 私はそれを「見る」ことができません....また、助けを求めてグーグルで検索しましたが、役立つ例は見つかりませんでした。
ocamllex ツールからの回答は、DFA コンテキスト(7 ステート、279 トランジション、テーブル サイズ 1158 バイトなど)で意味があります。

状態遷移表ですか?それを「読む」方法は?リンク/ヒントをありがとう!

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

ocaml - 一致した文字列 ocamllex の一部にアクセスする

単純な言語をスキャンして解析するために、ocamllex および ocamlyacc コードを手配しようとしています。同じ抽象構文を定義しましたが、複雑なルールをスキャンするのが難しいと感じています。これが私のコードです

しかし、一致した文字列の特定の部分にアクセスできません。式の宣言は再帰的であるため、ネストされた関数も役に立ちません(?)。助けてください。

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

parsing - 有用な情報を出力してパーサーをデバッグする

、、、、などの一連の式X[3]を解析したいと思います。X[-3]XY[-2]X[4]Y[2]

myparser.mlyでは、index( の内部にあります[]) は次のように定義されています。

tokenなどはINTEGERMINUS通常どおり lexer で定義されます。

例を解析しようとしましたが、失敗しました。ただし、コメント| MINUS INTEGER { 0 - $2 }するとうまくいきます。したがって、問題は確かにそれに関連しています。デバッグするには、より多くの情報を取得したい、つまり、 と見なされるものを知りたいですMINUS INTEGER。印刷を追加しようとしました:

ただし、解析中には何も出力されません。

情報を出力したりデバッグしたりする方法を教えてもらえますか?

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

tree - ツリー記述の文法例 (lex/yacc)

このツリーを記述するファイルからツリーを解析したい (これは実際には分類法です)。

ツリーの説明を提供する文法の例 (理想的には lex/yacc ファイル) を探しています。記述されたツリーが二分探索ツリーではなく、代わりに各ノード (おそらく) が複数の子を持つツリー (ファミリー ツリー? 平面ツリーと呼ばれますか?) である場合は、より良いでしょう。

理想的には、この lex/yacc が実際に OCaml ライブラリに含まれていれば完璧です。しかし、ツリーを記述するための優れた文法があれば、私は満足します。

Google や Stackoverflow で例を見つけようとしましたが、研究結果は解析ツリー関連の質問に圧倒されます。自分で文法を作成することもできますが、良い出発点を得るために、最初に例を見てみたいと思います.

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

ocaml - ocamlyacc で削減されないルール

ocaml を使用してレクサーをコンパイルすると、警告が表示されます。

そして、文字列を解析したいので、レクサーが引用を読み取ったときに開始し、他の引用を読み取ったときに終了する特別なルールを作成します。この場合、文字列を返し、他のすべての文字のルールトークンを呼び出します。

ファイルは次のとおりです。

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

parsing - サブルーチンのリストを解析する

を解析できるparser_sub.mlyandを書きました。Aは、とで囲まれたステートメントのブロックです。lexer_sub.mllsubroutinesubroutineSubEnd Sub

実際、私が処理したい生ファイルには、サブルーチンのリストといくつかの役に立たないテキストが含まれています。次に例を示します。

したがって、すべてのコメント (たとえば、など) を無視して を呼び出し、サブルーチンのリストを返すことで、このファイルを解析できるparser.mlyandを記述する必要があります。lexer.mllhaha' heheparser_sub.main

  1. Subパーサーが役に立たない文 ( aと以外の文) をすべて無視する方法を誰か教えてもらえますEnd Subか?

    ここにparser.mly私が書いてみた部分があります:

    /li>
  2. のルールと解析procedure_bodyは複雑で、実際には と で定義さparser_sub.mlylexer_sub.mllparser.mlylexer.mllますparser_sub.main