問題タブ [flex-lexer]
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.
bison - flex はどのように bison-location を正確にサポートしていますか?
複雑な言語から特定の文法要素を取得したいので、flex と bison を使用してフィルターを作成しようとしています。私の計画は、flex + bison を使用して文法を認識し、関心のある要素の場所をダンプすることです。(次に、スクリプトを使用して、ダンプされた場所に従ってテキストを取得します。)
flex は bison-locations と呼ばれる bison 機能をサポートできることがわかりましたが、それが正確にどのように機能するか. 私はフレックスドキュメントで例を試しました.yyllocはフレックスによって自動的に設定されていないようです.私はいつも(1,0)-(1,0)
. flex は各トークンの位置を自動的に計算できますか? そうでない場合、実装するためにどのインターフェイス関数が定義されていますか? 例はありますか?
ツールに関するより良い解決策はありますか?
よろしく、 ケビン
編集:
yylex のインターフェースは次のようになります。
bison のマニュアルでは、yylloc_param を正しく設定するためにレクサーがどのように実装する必要があるかを指定していません。私にとって、各トークンの列番号を手動で追跡するのは困難です。
c - unput間違った使用
flexへの入力であるtest.lを作成しました。これは、main関数で終了します。
main関数が次のように実装されている場合:
問題はありません。
パーサーをだまして、最初の文字が常にセミコロンであると信じ込ませたいので、mainを次のように実装しました。
上記はセグメンテーション違反につながります。
unputを使用すると、セグメンテーション違反が発生するのはなぜですか?
parsing - yyparse() を使用して 2 パス アセンブラを作成しますか?
私が取り組んでいるカスタム マイクロ コントローラーのアセンブラーを書いています。アセンブラが命令をバイナリにアセンブルするところまで到達しました。
ただし、現在、ラベルを機能させるのに問題があります。現在、アセンブラが新しいラベルに遭遇すると、ラベルの名前と参照先のメモリ位置を保存します。命令がラベルを参照すると、アセンブラはラベルを検索し、ラベルを適切な値に置き換えます。
これは素晴らしいことですが、ラベルを参照する命令の後にラベルが定義されている場合はどうなるでしょうか? このため、コードに対してパーサーを 2 回実行する必要があります。
主な機能として現在持っているものは次のとおりです。
これをフレックス/バイソン構成で使用しています。
parsing - 同じアプリケーションで 2 つ以上の Lex/Yacc パーサーを使用することは可能ですか?
ある種類の文法用のパーサーを既に持っているアプリケーションがあり、別の目的のために別の文法を追加する必要があります。
複数持つことは可能ですか?
もしそうなら、どうやって別のエントリポイントを取得しますか?
ありがとう
デビッド・アラン・フィンチ
bison - Lex/Yacc: 入力前にメッセージを表示
lex/yacc (flex/bison) を使用しているときにメッセージ/プロンプトを表示する方法を見つけようとしています。
たとえば、メインは次のようになります。
どちらが yacc を呼び出し、どちらが yylex() を呼び出します。これにより、STDIN で待機する空白行が生成されます。のようなメッセージを表示するにはどうすればよいですか...
それ以外の
アンダースコアはカーソル位置を表し、STDIN からの入力を待機しています...
言及するのを忘れていましたが、プロンプトを繰り返し出力したいと思います...そのため、毎回 lex/yacc が stdin からの入力を要求する前に..
c - flex lexer への文字列入力
flex/bison パーサーを使用して read-eval-print ループを作成したいと考えています。問題は、flex によって生成されたレクサーが FILE* 型の入力を必要としていて、それを char* にしたいということです。とにかくこれを行うことはありますか?
1 つの提案は、パイプを作成し、それに文字列を供給し、ファイル記述子を開き、レクサーに送信することです。これはかなり単純ですが、複雑で、プラットフォームにあまり依存していないように感じます。より良い方法はありますか?
parsing - Cのような定義文字列を解析する最も効果的な方法は?
いくつかの引数の前に置くことができるいくつかの追加のキーワードを使用してCのような言語で記述された関数定義のセットがあり(たとえば、「unsigned」または「register」と同じ方法)、これらの行を分析する必要がありますいくつかの関数スタブと同様に、それらから実際のCコードを生成します。
Flex / Yaccがそれを行うための最も適切な方法であるというのは正しいですか?
アナライザー/パーサーの経験がまったくない場合、正規表現を使用してシェルまたはPythonスクリプトを作成するよりも遅くなりますか(追加のキーワードの数が多くなり、その効果がかなり異なる場合、これは大きな苦痛になる可能性があります) (私はLALRがその仕事をする方法を知っていますが)?
同様の問題をカバーするLex/Yaccに関する優れた資料はありますか?私が見つけたすべての論文は、「おもちゃ」計算機の同じ原始的な例を使用しています。
どんな助けでもありがたいです。