DOM 树解析和语法树解析之间的区别?

Jac*_*kWM 5 schema parsing dom context-free-grammar concrete-syntax-tree

解析HTML或XML文件后,我们可以得到DOM树。

解析 C、C++ 或 JavaScript 后,我​​们可以获得语法树。

请注意,语法树是基于上下文无关语法构建的,该语法指定有效的 C/C++/JS 程序。

但看起来 DOM 树只是一个仅由 HTML/XML 文件指定的纯粹的层次结构。真的吗?这就是解析后进行架构验证的原因吗?这两种解析树的根本区别是什么?

stm*_*max 1

与任何其他语言一样,XML 是通过语法来描述的。XML 的语法相当简单(开始标记、结束标记、正确的嵌套)。因此语法树可能看起来也很简单(只是元素的层次结构)。XML 模式是另一种描述 XML 文件内容的语法。

所以基本上它是两个解析器互相调用。第一个验证所有开始标签都有结束标签并且嵌套正确。

第二个解析器验证 XML 文件的内容是否是根据架构(语法)构建的。就像名为“B”的元素只能包含在名为“A”的元素中一样。

这不应该与解析 C 等编程语言进行比较,因为您无法更改编程语言的语法。If 语句只能出现在函数体内,不能出现在函数体外,并且您无法更改这一点。然而,在 XML 中,您可以指定“B”元素只能出现在“A”元素中,或者“A”元素只能出现在“B”元素中。所有这些都通过指定 XML 文件内容的语法来实现以模式的形式。