たいのですが解析リストの名前=値ペアパーサジェネレータ(AOETOOLS,YACCなどの
-
23-08-2019 - |
質問
い構文解析しリスト(空白で区切られた)のペアの形
name1=value1 name2=value2 ...
場所:
- 名を含むことができな空白文字を除くと、等号
- 値を含むことができ以外は何も空白文字を含む等号!)
問題は、パーサに合わせ入力のような
name1=value1
として分離 'NAME EQUALS VALUE'
トークンとしてではなく、シングル 'VALUE'
トークンである。
PS.ごきげんよう、トメ子です些細なコードに直接は、この文脈で大きなパーサです。
解決
ここでは、この解析しANTLRで何か、である;
a=b=c=d c=d e=f
これはあなたが必要なものがすべてではないかもしれないが、それはコアである必要があります。
grammar NameValuePairs;
pairs : namevaluepair (WS namevaluepair)*;
namevaluepair
: name '=' value;
name : ID;
value : ID ('=' ID)*;
WS : ' ' {skip()};
EQ : '=';
ID : ~(' ' | '=')*;
他のヒント
私は値が等号を含めることができるかどうかが問題になってしまうかもしれないと思います。私はそれが可能な場合は、等号予約文字を作るために、より良い、または意味する別の予約文字「=」に切り替えると思います。
私は、これはあなたのより大きなパーサのコンテキストで動作するかどうか分からないが、あなたはあなたの「NAME = VALUE」のペアの配列(または任意のデータ構造をあなたの言語が使用する)を与える、スペースで分割できます。そして、「=」のために使用している予約文字の配列と再び分割をループ。あなたは「=」変更したり、準備ができない場合は、あなただけの「=」の最初のインスタンスと一致するregexで可能性があります。私は道オフベースではないよね!
あなたは名前と値のペアのための強力なパーサを必要といけない、正規表現は十分であろう。あなたには、いくつかのコンテキストまたはネストされた構造を持っていない限り、この「仕事」はレクサーに属している、いないパーサ:)
所属していません StackOverflow