gpt4 book ai didi

C++ token 类型

转载 作者:行者123 更新时间:2023-11-30 04:01:42 25 4
gpt4 key购买 nike

我假设 C++ token 类型(根据 2.7 Tokens [lex.token])不形成相交集(即 int 被认为只属于keyword token 类型,而不是 keywordidentifier token 类型)。考虑到这一点,出现了以下问题。

C++11 引用:

2.2 Phases of translation [lex.phases]

7 White-space characters separating tokens are no longer significant. Each preprocessing token is converted into a token. (2.7). The resulting tokens are syntactically and semantically analyzed and translated as a translation unit.

因此,C++ 文本的句法和语义分析是在将文本溢出到标记之后进行的。

另一个 C++11 引用:

2.7 Tokens [lex.token]

token:
identifier
keyword
literal
operator
punctuator

在标准中我找不到operatorpunctuator 语法非终结符的定义。无论如何,根据 2.12 关键字2.13 运算符和标点符号,标记 new 可以是 关键字运算符 token 。 C++ 编译器怎么可能在执行代码的句法和语义分析之前确定 new 标记的类型?

最佳答案

newdelete是名称由单个标记组成的可重载运算符。

产生式preprocessing-op-or-punc ([lex.operators]/1) 和operator ([over.oper]/1) 是去除标点符号和预处理运算符{ } [ ] # ## ( ) ; : ... ,有向字母替代标记 <: :>等,不可重载运算符 . .* :: ? , 词汇关键字备用标记 and and_eq等,以及多 token 运算符的添加 new[] , delete[] , () , 和 [] . new , delete , new[]delete[]包含在 operator 中,以便它们的 operator-function-id(operator new 等)可以遵循其他可重载运算符的规则,而不必重复语言,保留它更新,并发明一个新的产生式(dynamic-function-id?)出现在 operator-function-id 出现的任何地方。请注意,名称具有标识符词法形式(sizeoftypeid 等)的不可重载运算符不包含在operator 中,因此也不包含在preprocessing-op 中-或-刺痛

虽然这会在 identifierpreprocessing-op-or-punc 产品之间引入歧义,但这不会以任何方式影响第 3 阶段翻译。对于第 7 阶段,keywordoperator 之间存在歧义,这也不是问题,因为 operator 生产和其他包括代币 newdelete例如new-expression ([expr.new]) 不引用关键字运算符产生式,而是包含直接相关的代币。

关于C++ token 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25605783/

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