Как правильно использовать группы EBNF в Jison

Я пытаюсь выяснить, как справиться с ситуацией, возникающей при использовании расширения EBNF в Jison (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. Но я и j будут отсутствовать.

Я предполагаю, что что-то упустил, но не знаю, что это может быть...

Я могу предоставить полную грамматику, если необходимо, но попытался выделить проблему.

Спасибо заранее!

С наилучшими пожеланиями, Харальд

0 ответов

Другие вопросы по тегам