Jison で EBNF 拡張機能を使用しているときに発生する状況に対処する方法を見つけようとしています (Jison はデフォルトで BNF のみをサポートします。必要に応じてそのオプションを有効にすることができます)。
単純な XML パーサーを作成しようとしています。XML には、空のタグと空でないタグがあります。空でないタグには、開始タグ、コンテンツ、および終了タグがあります。コンテンツ EBNF ルールは次のように定義されます。
Content
: CHARDATA? (Element CHARDATA?)* {
var children = [];
$1 && children.push($1);
/* This will contain an array of all elements
but no character data ?! */
$2 && children.push($2);
$$ = children;
}
;
これで、デバッグによって、Jison がキャプチャ グループを $2 に割り当て、一致するものを配列で渡すことがわかりました。ここに一致のリストがあることを期待しているので、これは理にかなっています。しかし、私を本当に驚かせたのは、含まれている配列に要素だけがあり、文字データがない理由です。
たとえば、次の入力文字列を想定します。
<a>h<x/>i<y/>j</a>
ここで、上記の規則により、h、x、および y の表現が得られます。しかし、i と j は欠落します。
私は何かが欠けていると思いますが、それが何であるかはわかりません...
必要に応じて完全な文法を提供できますが、問題を切り分けようとしました。
よろしくお願いします!
よろしく、ハラルド