考虑这个简单的语法:
S - > a | B'/ P>
语法可能生成的字符串集是:
{a,b}
因此,语法生成一组字符串。
语法的解析器接受输入字符串并确定字符串是否可以由语法生成。
因此,解析器是语法的识别器。
至少,这是解析器的一种用法。
但是解析器通常用于其他事情。例如,语法的解析器可以获取输入字符串并创建一个包含输入数据并符合语法的树结构。
在这种情况下,解析器不是识别器,它是数据结构构建器。
我的结论是有不同类型的解析器。
我在逻辑上思考吗?确实存在不同类型的解析器吗?
是否有人创建了为其创建解析器的不同类型的事物列表?
请告知我上述陈述中的任何松散或含糊之处。我试图在关于这些概念的陈述中学会精确。例如,您是否同意“语法生成一组字符串”?那准确吗?正确的吗?
答案 0 :(得分:4)
不,我不同意。语法不会生成任何内容。它是一组定义某事物结构的规则。解析器接受语法和某种形式的输入并产生某种形式的输出,无论是抽象语法树,是根据语法输入是否良好的指示,或者它可能是什么。有不同类型的解析器,但不是因为它们产生了什么。相反,解析器根据它们可以接受的语法类型以及解释语法的方式进行分类。例如,有LL parsers和LR parsers,其中各种子类型都有额外的限制,例如,需要多少前瞻标记。
关于语法“生成”某事,会产生什么?
S -> ("a" | "b") S?
一旦语法变得非常重要,找到所有有效的输入就开始变得不再有意义了。