4

我试图弄清楚如何处理在 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 将丢失。

我想我错过了一些东西,但不知道它可能是什么......

如果需要,我可以提供完整的语法,但会尝试隔离问题。

提前谢谢了!

最好的问候,哈拉尔

4

0 回答 0