問題タブ [abnf]
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.
serialization - AMF0 StrictArray をエンコードする適切な方法は何ですか?
AMF0 仕様を概観した後、StrictArray 型をエンコードする適切な方法を理解できないことがわかりました。
仕様の最も直接的なセクションは次のとおりです。
配列数 = U32
strict-array-type = array-count *(value-type)
Augmented Backus-Naur Form (ABNF) 構文を使用して StrictArray 型を記述します ( RFC2234を参照) 。
StrictArray 型には、StrictArray オブジェクト グラフに表示される順序で序数インデックスまたは単純にエンコードされたオブジェクト (序数キーなし) がありますか?
また、追加の質問として、シリアライゼーション テーブル (オブジェクト参照 ID が生成される元) には、オブジェクト グラフ内のすべてのオブジェクトが含まれていますか、それとも参照 (ECMAArray、StrictArray、TypedObject、AnonymousObject) を介して潜在的にエンコードできるオブジェクトのみが含まれていますか?
regex - ABNF ルールを正規表現に変換する
このABNFルールを理解するのを手伝ってください([a-z]* [A-Z]* [0-9]*)*
。
このように正規表現に変換できると思います[a-zA-Z0-9]*
。したがって、ABNF ルールは、小文字および/または大文字および/または数字と、任意の順序およびそれらの組み合わせに一致する必要があります。たとえば、以下の文字列はルールと一致する必要があります。
また、ABNF ルールが の場合([a-z]* [A-Z]* | [0-9]*)*
、同じ正規表現に変換することもできます。
正規表現の検証は簡単ですが、これらの ABNF ルールについての私の理解を検証できるツールまたは何かがありますか、または誰かが私を確認または修正してください。
abnf - オプションのシーケンス規則の明確化
RFC5234の上記のセクションは正しくないようです。
[foo bar]
これは、オプションのシーケンス規則が と同等であるだけでなく、 と同等1*1(foo bar)
でもあるためだと思います1*1(bar foo)
。上記の例は、デフォルト値 0、つまり に一致します0*1(foo bar)
。
ただし、[] は通常、別の意味を持ちます。一方、私はどちらかまたは[foo bar]
どちらかを意味するべきだと思います。(foo)
(bar)
誰かが私のためにこの混乱を解消できますか?
antlr4 - ANTLR 4.1 変数 ANTLR 4 トークンの多重度により、エラーが発生します:「空の文字列に一致する可能性のある代替手段が少なくとも 1 つある閉鎖」
基本的に私がやろうとしているのは、ANTLR 4.1 で国際化リソース識別子の文法を作成することです。これまでで最も苦労したのは、ipv6address のプロダクション ルールを正しく機能させることです。RFC 3987で ipv6address が定義されている方法は、基本的に、そのプロダクション ルールだけで ABNF 形式に 9 つの異なる選択肢があることです。
ここで、ls32 と h16 は両方とも次のように定義されたサブルールです。
そしてh16の場合:
ここで、HEXDIG は有効な 16 進数のレクサー規則です。このABNF文法を次のようなANTLR構文で記述しようとしました:
私の ANTLR 文法では、ipv6address と h16 の両方について、ABNF 文法で定義された多重度規則を指定するためにセマンティック述語を使用しようとしています。org.antlr.v4.Tool クラスを実行すると、次の出力が得られます。
もちろん、警告も取り除きたいのですが、「ipv6address」には、空の文字列に一致する可能性のある少なくとも 1 つの代替手段を含むクロージャーが含まれているというエラーを取り除く必要があります。複数の代替エラーについて、StackOverflow で同様の投稿を見たことがあります。ただし、空の文字列に一致する可能性のあるクロージャを扱ったものはありませんでした。また、UCSCHAR の \uFFFF より後の Unicode 文字をサロゲート ペアとして定義する必要があると確信していますが、後で処理します。今のところ、閉鎖の問題を取り除く方法を知る必要があります。
perl - Parse::ABNF perl の使い方
SIP ヘッダー (ABNF 形式の文法) を解析し、ヘッダー文字列が正しいかどうかを確認する必要があります。
(例: "Accept: application/sdp,application/3gpp-imp+xml" のような文字列をチェックして、テストケースの合格/不合格を提供します)。
現在、私は perl Parse::ABNFを使用しようとしています。現在、このコンテキストでのサンプルの使用法を理解できません。
c++ - ファイルから C++ のタグを使用して ABNF 文法を読み取り/解析する
この単純化された例のようなタグを持つ ABNF Grammar を含むファイルがあります。
ここでのタスクは、この文法の特定の文を解析してユーザー ID を取得することです。たとえば、文の解析
userID 429 を取得する必要があります。文法は実行時に変更される可能性があるため、実行時に読み込む必要があります。
今のところ私のアプローチは次のとおりです。
文法を 1 つまたは複数のツリーに解析し、それらが属するリーフまたはノードにタグを配置します
これ/それらのツリーで文を解析して、指定された文を作成するツリーを構築します(これにはEarleyを使用することを考えています)
このツリーを使用してタグを取得します (例とは異なり、このようなツリーには複数の異なるタグがあります)
私の質問は、このタスクを解決するために使用できる、または少なくとも変更できるソフトウェア コンポーネントはありますか? 特に、ステップ 1 と 2 は非常に一般的なようです (1. ABNF 文法を C++ 内部表現 (ツリーなど) に読み込む; 2. 初期アルゴリズム (またはそのようなもの) を 1. の内部表現で操作する)。ステップ 1 の完全で障害のない ABNF パーサーを作成することは、私にとって非常に時間のかかる作業です。
VoiceXML 文法がこのように機能することは知っていますが、それらのパーサーを見つけることができませんでした。基本的に私が見つけることができたのは、単一の文法の C++ コードを生成するパーサー ジェネレーターだけでした。これは、コンパイル時に文法がわからないため、実用的ではありません。
何か案は?