gpt4 book ai didi

parsing - 语法、堆栈、终端符号和标记

转载 作者:行者123 更新时间:2023-12-05 05:18:52 24 4
gpt4 key购买 nike

解析器(或编译器)通常包含分词器,它可以识别作为输入的字母表中符号系列中的某些分词类型。

这样我们的解析器只读取 token 流。不是原始字符。

然而,在语法层上,人们谈到终结符和非终结符。但不是代币。

这意味着语法和堆栈(假设我们使用的是 LL(k) 或 LR 系列解析器)都由终结符和非终结符组成。但是,我们也假设它是有道理的,同样从语法角度讲符号时,也可以使用终端符号的标记类型。

是否有关于如何表示文法符号(尤其是终结符)的约定,以及终结符通常是“类型化”的吗?

我的猜测是接口(interface)的多重继承——但只有一个 TokenType 类,因此接口(interface)实际上没有任何意义。使用 IGrammarSymbol,您至少有两个类,Terminal 和 Nonterminal,它们可以实现该接口(interface)。

此致

最佳答案

每个文法符号,无论是终结符还是非终结符,在逻辑上都是解析器中的一个(不同的)类。不同的“终端”类或不同的“非终端”类之间没有内在的相似性,将这些类分组为从“终端”和“非终端”基类派生的继承结构毫无意义。

文法符号的每个具体实例都与零个或多个属性相关联。属性的语义和类型由符号的类型决定。从同一基类型派生出两个恰好具有相同(或相似)属性集合的不同语法符号类是有意义的。例如,不同类型的表达式运算符非终结符可能都派生自某些基 Expression 类。载值终结符(标识符和文字常量)也可能派生自此类,但纯句法终结符更有可能派生自没有语义属性的类。 (它可能仍然具有与源代码位置相关的句法属性。乍一看似乎这些句法属性仅适用于终端,但对于非终端也具有句法属性通常很方便。)

关于parsing - 语法、堆栈、终端符号和标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47112375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com