問題タブ [antlr]
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.
java - 条件付きチェーンをより高速で醜いコードに変えるにはどうすればよいですか?
私は9つの異なる文法を持っています. 解析しているファイルの txt の最初の行に応じて、これらのいずれかが読み込まれます。
レクサー/パーサーのスポーンを 9 月に派生させることを考えていました。クラスを作成してから、一致するものを取得したらすぐにそれらをインスタンス化します。ただし、それによって速度が低下するかどうかはわかりません。私はいくつかのベンチマークが整っていると思います。
本当に、速度は間違いなくここでの私の目標ですが、これが醜いコードであることはわかっています。
現在、コードは次のようになっています。
いくつかの説明
1) はい、私は antlr で構築した 9 つの異なる文法を本当に持っているので、それらはすべて独自のレクサー/パーサー obj を持ちます。
2) はい、現時点では文字列を比較しており、明らかに何らかの整数マップに置き換えられます。サイト識別子を 1 つの正規表現にまとめることも検討しましたが、それによって速度が向上するとは思えません。
3) はい、これは疑似コードなので、ここでのセマンティクスにあまりこだわりません..
4) lexer/parser ペアの 1 つのインスタンスを作成できないという点で、kdgregory は正しいです。
コードの見栄えを良くするためのハッシュのアイデアは気に入っていますが、速度が上がるとは思いません。
c++ - C++で記述されたコンパイラ用のツリーパーサー
C++で記述されたコンパイラーのASTを変換するのに役立つツリーパーサージェネレーターを見つけたいと思います。
いくつかの簡単な調査の結果、ANTLR(Cで動作するようにターゲットを設定できますが、C ++では動作しない)について知りました。また、C ++でANTLRを使用しないように警告するWebサイトを見つけました:http://www.bearcave.com/software/antlr/antlr_treeparse.html。この記事も10年前のものであるため、苦情は古くなっている可能性があります。
とにかく、私が知りたいのは、そこに代替手段があるかどうか、または私はANTLRを使用するか、自分で書くことに固執していますか?
code-generation - ANTLR:オプションパラメータの文法テスト(?演算子を使用)
私はANTLR文法を持っており、オプションのパラメーターを許可する関数を自分の言語で定義しています。オプションのパラメーターがコード生成ブロック内で渡されているかどうかを確認するにはどうすればよいですか?
私は基本的に、この架空のツリー文法ステートメントのようなことを行うための構文を探しています。
ドキュメントへの提案やポインタは大歓迎です!
java - ANTLR (フィールド=値)、これをどのように表現しますか?
私はレクサーとパーサーの初心者なので、しばらくお待ちください。最終的には、'(foo=bar)'、'(!foo=bar)'、'(&(foo=bar)(!zip=zap))' などの LDAP スタイルのクエリ文字列を表現できるようにしたいと考えています。最後に、実際のデータベースクエリ(または何でも)を作成するために使用できるツリー
そこで、(foo=bar) や (!foo=bar) のような式を解析するための最も単純な形式から始めようと考えましたが、すでにいくつかの理解の問題があります。フィールドが「=」によって値と区切られていることを表現したいだけですが、識別子が値によく似ているため、ANTLR は一度にすべての文字を食べているようです。これを防ぐにはどうすればよいですか?
parsing - antlr javaccのように、人々はパーサーで何をしますか?
好奇心から、人々はパーサーで何ができるのか、それらがどのように適用されるのか、そして人々は通常それを使って何を作成するのだろうか?
プログラミング言語業界で広く使われていることは知っていますが、これはほんの一部だと思いますよね?
antlr - トークン定義とレクサートークンの違い
tokens ブロックでトークンを定義することと、トークンをレクサー インデックスとして定義することの違いは何ですか?
java - wikimedia マークアップの解析 - EBNF ベースのパーサーはあまり適していませんか?
ウィキペディアで見つかったウィキメディア マークアップを (Java で) 解析しようとしています。このタスク用の既存のパッケージが多数ありますが、私のニーズに特に適したものは見つかりませんでした。私が使った中で最高のパッケージはMathclipse Bliki パーサーで、ほとんどのページでまともな仕事をします。
ただし、このパーサーは不完全で、特定のページの解析に失敗したり、他のページを正しく解析しません。悲しいことに、コードはややこしいので、この解析エンジンの問題を修正するには非常に時間がかかり、エラーが発生しやすくなります。
より優れた解析エンジンを見つけようとして、このタスクに EBNF ベースのパーサー (特に ANTLR) を使用して調査しました。しかし、いくつかの試行の後、ウィキメディアのマークアップは比較的緩和されており、構造化された文法に簡単に適合できないため、このアプローチはこのタスクにはあまり適していないようです。
ただし、ANTLR および同様のパーサーに関する私の経験は非常に限られているため、そのようなパーサーが本質的にこのタスクにあまり適していないというよりも、問題を引き起こしているのは私の経験不足である可能性があります。これらのトピックについてより多くの経験をお持ちの方は、ここで検討していただけますか?
@Stobor: Google クエリによって返されるものを含め、さまざまな解析エンジンを見てきました。私がこれまでに見つけた最高のものは、Bliki エンジンです。問題は、そのようなパーサーの問題を修正するのが信じられないほど面倒になることです。これらのパーサーはすべて、本質的に条件文と正規表現の長いチェーンであり、結果としてスパゲッティ コードになるからです。EBNF 解析法に似たものを探しています。その方法はより明確で簡潔であり、理解しやすく進化しやすいからです。あなたが投稿した mediawiki のリンクを見てきましたが、箱から出してすぐに使える EBNF はこのタスクにはあまり適していないという私の疑いを裏付けているようです。したがって、私は、EBNF のように明確で理解しやすいだけでなく、wiki マークアップの乱雑な構文を処理できる構文解析エンジンを探しています。
c++ - ローカルテスト/ビルドマシンをセットアップする方法は?
私は新しい個人的なプロジェクトを始めようとしています。かなり大きなものを目指しているので、なんらかのCVSを維持するのがいいと思いました。また、単体テストに関する興味深い記事をたくさん読みました。プロジェクトを自動的にビルドし、チェックインするたびに一連のテストを実行するシステムを含めたいと思います。特徴は次のとおりです。
- 1台の開発者と1台のマシン(私と私のコンピューターだけ!)。
- CVSを含めます。
- 自動テストを含めます。
- ソフトウェアは(無料のように)無料で、Linuxで実行する必要があります。
- C++およびANTLRベースになります。
これまでのところ、開発用にSVNとEclipse + CDT + ANTLRをセットアップしましたが、自動ビルド+テスト設定についてはかなり迷っています。Boost.TestまたはUnitTest++で考えていたテストを書くために。
それが私の質問の源です。ローカルのテスト/ビルドマシンをどのようにセットアップする必要がありますか?貴重なチュートリアルへのリンクは大歓迎です。
ありがとう。
whitespace - Antlr隠しチャネルの空白の問題
私は次のAntlr文法を持っています:
ANTLRWorks 1.2.3 インタープリターでは、入力hi world
とが期待どおりhi/**/world
にhi /*A*/ world
機能します。
ただし、動作しないはずの inputhiworld
も受け入れられます。どうすればhiworld
失敗しますか?「こんにちは」と「世界」の間に少なくとも 1 つの空白 (またはコメント) を強制するにはどうすればよいですか?
この例では、簡略化のために MLCOMMENT と WHITESPACE のみを使用していますが、他の種類のコメントもサポートされていることに注意してください。