問題タブ [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.
antlr - ANTLR できれいな Python のような文法を構築するにはどうすればよいですか?
こんにちは!
セミコロンやバックスラッシュを必要とせずに複数行の式を処理する単純な ANTLR 文法を作成するにはどうすればよいですか?
式の単純な DSL を作成しようとしています。
全体として、アプリケーションでスクリプトに名前付きの初期値をいくつか提供し、最終結果を引き出す必要があります。しかし、私は構文に夢中になっています。次のような複数行の式をサポートしたいと思います。
私は次のような ANTLR 文法から始めました。
それは簡単に思えますが、私はすでに改行に問題があります:
グラフィカルに、org.antlr.works.IDE で:
意思決定は、複数の選択肢を使用して NL に一致させることができます http://img.skitch.com/20090723-ghpss46833si9f9ebk48x28b82.png
私は文法を蹴散らしましたが、常に期待される動作に違反してしまいます:
- ファイルの末尾に改行は必要ありません
- 空行は許容されます
- ポンド記号以降の行はすべてコメントとして破棄されます
- 代入はセミコロンではなく行末で終わる
- 括弧で囲まれている場合、式は複数の行にまたがることができます
これらの特徴の多くを備えた ANTLR 文法の例を見つけることができます。それらを切り詰めて表現力を必要なものだけに制限すると、何かが壊れてしまうことがわかりました。他は単純すぎて、表現力をつけながら壊していきます。
この文法でどの角度を取るべきですか? 自明または完全なチューリング完全言語ではない例を教えてください。
html - HTMLを出力するカスタムドメイン固有言語の作成を検討中
HTMLを出力する独自のカスタムドメイン固有言語を作成したいと思っています。
基本的に、自分のマークアップを使用してクイズを作成できるようにしたいのですが、それをHTMLにコンパイル/生成します。例えば:
出力する必要があります
ANTLRはそれに似たようなことをしますが、HTML出力がないことを私は知っています。他に何か提案はありますか?
c# - ANTLRを使用してブール検索文字列を解析する方法を説明する優れたチュートリアルはありますか
キーワードと演算子のブール検索文字列を解析して、C#コードから実行するSQLクエリにする必要があります。このタスクに必要なのはANTLRのようなものだと思いますが、その方法がわかりません。
これを行う方法についての良いチュートリアルはありますか?または、別のツールが必要ですか?
私が言っていることの例を以下に示します。必要な演算子はANDとORだけです。かっこも使えるようにしたいと思います。
入力式:(青と緑)または黄色
出力:
SELECT * FROM table WHERE(CONTAINS(Description、 "blue")AND CONTAINS(Description、 "green"))OR> CONTAINS(Description、 "yellow"
可能であれば、暗黙的なAND挿入もサポートしたいと思います。したがって、何も指定されていない場合のデフォルトの演算子はANDです。
入力:緑(青または黄色)
出力:SELECT *FROMテーブルWHERECONTAINS(Description、 "green")AND(CONTAINS(Description、 "blue")OR> CONTAINS(Description、 "yellow"))
return-value - ANTLR での複数の戻り値の処理
ANTLR には簡単なルールがあります。
title_args は次のとおりです。
コンパイルしようとすると、タイトル ルールで 127 エラーが発生します。title_args は一意でない参照です。
このWebサイトの別の同様の質問( ANTLRでリストの戻り値を処理する方法)に与えられた解決策に従いましたが、字句ルールでのみ機能するようです。
それを回避する特定の方法はありますか?
ありがとう、クリストス
antlr - 指定したパッケージのディレクトリを修正するコードを生成する
私は ANTLRWorks を使用しており、@header アクションを使用して Java パッケージを指定しています。
@header {パッケージ com.xxx.xxx.xxx.compiler}
ただし、Java コードを生成すると、src/com/xxx/xxx/xxx/compiler ではなくルート src ディレクトリに生成されます。その結果、きれいにコンパイルされません。
コードを生成する正しいディレクトリを指定するにはどうすればよいですか?
.net - .NET 用の優れたパーサー ジェネレーター (lex/yacc または antlr を考えてください)? ビルド時だけ?
.NET 用の優れたパーサー ジェネレーター (lex/yacc または antlr を考えてください) はありますか? 弁護士を怖がらせないライセンスを持っている人はいますか? 多くの LGPL がありますが、私は組み込みコンポーネントに取り組んでおり、一部の組織は私が LGPL に依存することを快く思っていません。
Oslo がこの機能を提供する可能性があると聞いたことがありますが、それがビルド時の依存関係なのか、それともランタイムの依存関係なのかはわかりません。オスロが提供するものを誰か明確にしてもらえますか?
更新
私が本当に欲しいのは、ビルド時のみの依存関係であるパーサージェネレーターです。ANTLR にはランタイム コンポーネントがあるようです。
parsing - Antlr ツリーの書き換え規則
のような式を解析しようとしていますa IN [3 .. 5[
。ここでは、山かっこの方向によって、間隔が含まれるか含まれないかが決まります。これをASTのように書き換えたい
NODE-TYPE は、山括弧の方向に応じて、BTW_INCLUSIVE、BTW_EXCL_LOWER、BTW_EXCL_UPPER または BTW_EXCL_BOTH のいずれかです。
次の解析ルールがあります。
これは機能しますが、正しいツリー ノード タイプが作成されません。一致したものに基づいて作成するノード タイプを選択するにはどうすればよいですか?
c# - ANTLR を使用して独自の C# コンパイラを構築する: Compilation Unit
ルート、クラス、メソッドなどを抽出するために、compile_unit_return タイプの x を使用して何ができますか? そのアダプタを抽出する必要がありますか? それ、どうやったら出来るの?Compilation_unit_return は私の CSParser でそのように定義されていることに注意してください (これは ANTLR によって自動的に生成されます):
ただし、取得しているツリーはオブジェクト型です。デバッガーを使用して実行したところ、BaseTree タイプであることがわかりました。しかし、BaseTree はインターフェースです。それが BaseTree とどのように関係しているかはわかりませんし、このツリーから詳細を抽出する方法もわかりません。
クラス、メソッド、変数などにアクセスするビジターを作成する必要があります。ParserRuleReturn クラスは RuleReturnScope から拡張され、開始オブジェクトと停止オブジェクトを持ちますが、それが何であるかはわかりません。
さらに、ANTLR が提供するこの TreeVisitor クラスがありますが、これは紛らわしく見えます。コンストラクターにパラメーターとしてアダプターを渡す必要があります (そうでない場合は、デフォルトの CommonTreeAdaptor を使用します)。これが、以前にアダプターを取得する方法について尋ねた理由です。そして他の問題も。API については、 http://www.antlr.org/api/CSharp/annotated.htmlを参照できます。
css - ANTLR を使用した CSS の解析 - エッジ ケース
ANTLRを使用してCSS、または少なくとも基本を解析しようとしています。ただし、レクサールールでいくつかの問題が発生しています。問題は、ID セレクターと 16 進数のカラー値の間のあいまいさにあります。わかりやすくするために簡略化された文法を使用して、次の入力を検討してください。
および次のパーサー規則:
およびこれらのレクサー トークン:
#bbb はセレクターであるはずなのに、COLOR トークンとしてトークン化されているため、これは機能しません。16 進数で始まらないようにセレクターを変更すると、正常に動作します。これを解決する方法がわかりません。特定のトークンが特定の位置にある場合に、特定のトークンを COLOR トークンとしてのみ扱うように ANTLR に指示する方法はありますか? たとえば、それがプロパティ ルール内にある場合、それはカラー トークンであると安全に想定できます。そうでない場合は、セレクターとして扱います。
どんな助けでも大歓迎です!
解決策: 文法でやりすぎたことがわかったので、おそらく AST を使用するコードで対処する必要があります。CSS にはあいまいなトークンが多すぎて、異なるトークンに確実に分割できません。そのため、私が現在使用しているアプローチは、基本的に「#」、「.」、「:」などの特殊文字と中括弧をトークン化し、消費者コード。はるかにうまく機能し、エッジケースへの対処が容易になります。