-1

考虑这个简单的语法:

S -> 一个 | b

该文法可能生成的字符串集是:

{a, b}

因此,语法会生成一组字符串。

语法解析器接受输入字符串并确定该字符串是否可以由语法生成。

因此,解析器是语法的识别器。

至少,这是解析器的一种用途。

但通常解析器用于其他事情。例如,语法解析器可以获取输入字符串并创建一个包含输入数据并符合语法的树结构。

在这种情况下,解析器不是识别器,而是数据结构构建器。

我得出结论,有不同类型的解析器。

我在逻辑思考吗?确实有不同类型的解析器吗?

是否有人创建了解析器创建的不同类型事物的列表?

请让我知道上述陈述中的任何松散或歧义。我正在努力学习在关于这些概念的陈述中准确无误。例如,您是否同意“语法生成一组字符串”?那是精确的吗?正确的?

4

1 回答 1

4

不,我不同意。语法不会产生任何东西。它是一组定义事物结构的规则。解析器采用语法和某种形式的输入并产生某种形式的输出,无论是抽象语法树,输入是否根据语法格式正确的指示,还是其他可能的形式。有不同类型的解析器,但不是因为它们产生什么。相反,解析器是根据它们可以接受的语法类型以及如何解释该语法来分类的。例如,有LL 解析器LR 解析器,各种子类型对例如需要多少前瞻标记有额外的限制。

关于“生成”某些东西的语法,这会生成什么?

S -> ("a" | "b") S?

一旦语法变得不平凡,找到所有有效输入就不再有意义了。

于 2013-08-30T16:28:40.470 回答