gpt4 book ai didi

compilation - 标记和词位有什么区别?

转载 作者:行者123 更新时间:2023-12-03 05:14:08 25 4
gpt4 key购买 nike

在 Aho Ullman 和 Sethi 的《编译器构建》中,给出了源程序的输入字符串被划分为具有逻辑含义的字符序列,称为标记,而词位是构成字符的序列。 token 那么基本区别是什么?

最佳答案

使用“Compilers Principles, Techniques, & Tools, 2nd Ed.(WorldCat)作者:Aho、Lam、Sethi 和 Ullman,又名 Purple Dragon Book ,

Lexeme 第 3 页111

A lexeme is a sequence of characters in the source program thatmatches the pattern for a token and is identified by the lexicalanalyzer as an instance of that token.

代币页。 111

A token is a pair consisting of a token name and an optional attributevalue. The token name is an abstract symbol representing a kind oflexical unit, e.g., a particular keyword, or sequence of inputcharacters denoting an identifier. The token names are the inputsymbols that the parser processes.

图案页。 111

A pattern is a description of the form that the lexemes of a token maytake. In the case of a keyword as a token, the pattern is just thesequence of characters that form the keyword. For identifiers and someother tokens, the pattern is more complex structure that is matched bymany strings.

图 3.2:代币示例第 112 页

[Token]       [Informal Description]                  [Sample Lexemes]
if characters i, f if
else characters e, l, s, e else
comparison < or > or <= or >= or == or != <=, !=
id letter followed by letters and digits pi, score, D2
number any numeric constant 3.14159, 0, 6.02e23
literal anything but ", surrounded by "'s "core dumped"

为了更好地理解与词法分析器和解析器的关系,我们将从解析器开始,然后向后工作到输入。

为了更容易地设计解析器,解析器不直接处理输入,而是接受词法分析器生成的标记列表。查看图 3.2 中的标记列,我们看到诸如 if 之类的标记。 , else , comparison , id , numberliteral ;这些是 token 的名称。通常,对于词法分析器/解析器来说,标记是一种结构,它不仅保存标记的名称,还保存组成标记的字符/符号以及组成标记的字符串的开始和结束位置,其中用于错误报告、突出显示等的开始和结束位置。

现在词法分析器接受字符/符号的输入,并使用词法分析器的规则将输入字符/符号转换为标记。现在,使用词法分析器/解析器的人们对他们经常使用的东西有自己的说法。您所认为的构成标记的字符/符号序列就是使用词法分析器/解析器的人所说的词法。因此,当您看到词位时,只需考虑代表标记的字符/符号序列。在比较示例中,字符/符号的序列可以是不同的模式,例如 <>else3.14

考虑两者之间关系的另一种方法是,标记是解析器使用的编程结构,它具有称为词素的属性,用于保存输入中的字符/符号。现在,如果您查看代码中标记的大多数定义,您可能不会将词素视为标记的属性之一。这是因为 token 更有可能保存表示 token 和词位的字符/符号的开始和结束位置,字符/符号的序列可以根据需要从开始和结束位置导出,因为输入是静态的。

关于compilation - 标记和词位有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14954721/

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