gpt4 book ai didi

c++ - 为什么我们需要 `simple-declaration` 中的第二个定义?

转载 作者:行者123 更新时间:2023-12-02 02:07:21 28 4
gpt4 key购买 nike

simple-declaration :
decl-specifier-seq init-declarator-listopt ;
属性说明符-seq decl-说明符-seq 初始化声明符列表 ;                                         <====< br/>属性说明符序列opt decl-specifier-seq 引用限定符< sub>opt [标识符列表]初始化程序 ;

请注意,此定义中需要attribute-specifier-seq。什么时候发生?

最佳答案

鉴于我们希望我们的语法接受:

DSS;
DSS IDL;
ASS DSS IDL;

(加上接受数组形式,这个答案不会进一步处理)

但不是

ASS DSS;

也就是说,如果提供了属性说明符,则需要init-declarator-list

问题中所示的语法产生式提供了这一点,重要的是仅以一种方式解析任何合法的简单声明

每个没有属性说明符序列的声明都使用第一种情况进行解析。每个声明都使用第二种情况进行解析。这两种情况没有重叠。

如果第二种情况是

attribute-specifier-seqopt decl-specifier-seq init-declarator-list ;

那么将允许相同的输入,但规则重叠 - DSS IDL; 形式的输入将匹配第一个和第二个,从而创建不明确的解析。

不需要重叠的规则。

有不止一种方法可以通过不重叠的规则来解决这个问题。以下也可以:

decl-specifier-seq ;

attribute-specifier-seqopt decl-specifier-seq init-declarator-list ;

实际上,这来自 Karnaugh map蕴涵运算符的真值表(提供 ASS 意味着提供 IDL),它具有 L 模式中的三个 True 单元。一种解决方案是使用垂直圆,另一种解决方案是使用水平圆。

在数字逻辑中,重叠可以防止出现故障(很好!)。在语言语法中,重叠会产生解析歧义(不好!)。

关于c++ - 为什么我们需要 `simple-declaration` 中的第二个定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68231285/

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