16

最近、ANTLRの学習を始めました。レクサー/パーサーを一緒に使用してプログラミング言語を構築できることを知っています。

DSL やプログラミング言語以外で、レクサー/パーサー ツール (および知識) を直接的または間接的に使用して、現実の問題を解決したことがありますか? レクサーやパーサーの知識がなくても、平均的なプログラマーがこれらの問題を解決できるでしょうか?

4

10 に答える 10

14

はい、使用しました。はい、それらがなくてもできますが、作業に間違ったツールを選択するたびに、自分自身に不必要な苦痛を与えることになります.

私が個人的にテクノロジーを利用した非標準的な用途の例:

  • レガシー システムによって生成されたレポートからのデータのスクレイピング
  • 正規表現には複雑すぎるデータのパターンを選択する
  • プロトコル分析
  • テキストベースのアドベンチャーゲーム
  • Toledo を食べたメタプログラミング API (本名ではありません)
  • コード分​​析・ログ分析
  • データベース内の「フリーフォーム」フィールドを分離する
  • 私は忘れています(私は年をとっています)
于 2009-03-14T05:55:15.937 に答える
5

構文の強調表示。Sciteテキスト エディターを使用すると、独自のレクサーを (C++ で)記述して、任意のカスタム言語に構文の強調表示を提供できます。このトピックの復習として、Scite 用に独自のカスタム レクサーを作成しました (大学で少し前に勉強しました)。

正規表現は、パターン マッチングや単純な言語処理の代替手段としてよく使用されます。これは、.NET などのフレームワークでの RegEx サポートの改善により、近年さらに一般的になっています。多くの場合、開発者は字句解析/解析手法を知らないため、デフォルトで Regex を使用することになります。

ただし、別の回答が言うように、正規表現はすぐに非効率になり、遅くなり、単純な文法/言語以上のものを維持するのが難しくなります。そのような状況では、一般的にパーサー/レクサーが最良の選択です。

于 2009-03-14T06:17:55.960 に答える
2

はい、実世界でそれらを使用しましたが、ほとんどの場合、レクサーとパーサーを使用するカスタム言語の作成は、XML で定義された言語に取って代わられています。より冗長ですが、すべての作業を行う必要はありません...

于 2009-03-14T06:21:04.470 に答える
2

はい、使用しました。私はANTLRの大ファンです。ANTLR の使用に関するいくつかのヒントとコツをここで紹介し、ここでそれを簡単に支持します。アドホック メソッドを使用して独自のパーサーを手書きすることは可能ですが、パーサーが解析することになっている言語を拡張する必要がある場合は、変更を加える方法を理解するのが非常に難しく、時間がかかります。

于 2009-03-14T06:23:47.503 に答える
2

テキスト入力を処理する場所では、何らかのレクサー/パーサーを使用することになりますが、時にはそれらが退化したケースになることもあります (1 つのトークン タイプとしてコンマ以外のすべてをレックスし、別のトークン タイプとしてコンマをレックスします。数値、名前、数値を解析します)。そのようなこと) ある見方でsscanfは、レクサー/パーサージェネレーターの最も退化したケースと見なすことができます。

本格的な lex/yacc 操作については? 主にGPLや DSL の大まかな定義に該当するものに使用されると思います

于 2009-03-14T06:35:00.333 に答える
1

多くのシステムで使用されているレクサー/パーサーの好例が、Apache Lucene (オープン ソースの検索インデックス ライブラリ) にあります。クエリ パーサーとドキュメント トークナイザーの両方がこれらのテクノロジを使用します。Lucene のクエリ パーサーを DSL パーサーとして分類できると思いますが、実際の問題を解決するためにまだ使用されています。

さらに言えば、Google は独自のクエリ構文とドキュメントの解析のために何らかのレクサー/パーサーを採用していると確信しています。

于 2009-03-14T06:04:50.903 に答える
1

これは面白い -

単純な文字列ベースのクエリ式を IBindingListView 実装で処理できるように、レクサー/パーサーを手作業で作成しました。これは、コード以外で実際に使用できた最初の有用なものであり、それについて聞いただけではありません。

かなり歩行者の例ですが、私は彼らとの経験ではかなり歩行者です。

于 2009-03-14T06:23:42.967 に答える
1

私は大物を使って字句解析を行ったことはまだありませんが、自分が取り組んでいるプロジェクトのために自分の字句解析プログラムを手作業で作成しました。近宇宙プロジェクトのデータ コンピューターから返されたデータを解析する必要があり、バイナリで SD カードに書き込まれました。ビットを引き離し、2 進数から 10 進数に変換してから、内容全体をカンマ区切りのファイルに書き出す必要がありました。

座って論理的に考え、目の前のタスクのステート マシンを作成するのはとても楽しいことです。

于 2009-03-14T06:30:51.747 に答える
0

はい!私が一緒に働いているチームは、ドキュメント生成フレームワークを実装しました。これにより、(主に算術) 式を評価することができます。パーサーを使用して、生成されたドキュメントの入力/定義から式を抽出し、それらの式ツリーを作成しています。その後、これらのツリーが評価され、評価された結果が最終ドキュメントに書き込まれます。

于 2009-10-15T20:23:14.707 に答える