为什么我们需要在“简单声明”中使用下面的第二个定义?

贝洛克

简单声明:
     decl-specifier-seq init-declarator-list opt ;
     attribute-specifier-seq decl-specifier-seq init-declarator-list ;                                          <====
     attribute-specifier-seq opt decl-specifier-seq ref-qualifier opt [标识符列表]初始值设定项 ;

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

本·沃格特

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

DSS;
DSS IDL;
ASS DSS IDL;

(加上接受数组形式,这个答案将不再处理)

但不是

ASS DSS;

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

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

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

如果第二种情况是

属性说明符-seq opt decl-specifier-seq init-declarator-list ;

那么相同的输入将被允许,但规则重叠——表单的输入DSS IDL;将匹配第一个和第二个,创建一个不明确的解析。

不需要重叠规则。

使用非重叠规则解决此问题的方法不止一种。以下也可以:

声明说明符序列 ;

属性说明符-seq opt decl-specifier-seq init-declarator-list ;

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我们需要第二个std :: forward专业化?

来自分类Dev

为什么我们需要在函数中的第二个参数之后初始化参数参数?

来自分类Dev

如果将http重定向到https nginx,我们是否需要在第二个服务器块中使用server_name

来自分类Dev

为什么下面的第二个片段显示未定义的行为?

来自分类Dev

为什么要在 WriteProcessMemory() 函数的第二个参数中使用 (void*)?

来自分类Dev

为什么我们在现有数据库条目的 Django 表单中首先使用实例作为第二个参数

来自分类Dev

为什么我们需要在两个选择中使用 () 和?

来自分类Dev

我需要在第二个“if”语句中更改什么?

来自分类Dev

SQL仅使用Join从2个表中获取数据,我们还需要第二个表中的空记录

来自分类Dev

我是否需要在第二个if语句中指定不使用第二个变量?如果是这样,怎么办?

来自分类Dev

为什么我需要第二个 for 循环 w/ append 来制作这个列表?

来自分类Dev

当我在Bash函数中使用getopts时,为什么它在第二个调用中忽略参数?

来自分类Dev

为什么在下面的例子中使用 ">=" 不起作用 为什么我们必须使用“-1”?

来自分类Dev

需要在Swift中使用可可绑定和核心数据来使用第二个窗口

来自分类Dev

JS应该选择第二个选项,其中我们使用了selected =“ selected”

来自分类Dev

为什么我们需要在C ++头文件中使用“ #if defined Identifier”?

来自分类Dev

为什么我们需要在图灵的暂停证明中使用否定部分?

来自分类Java

为什么我们需要在Java中使用移位运算符?

来自分类Dev

为什么我们需要在Inno Setup中使用#expr指令?

来自分类Dev

为什么我们需要在Html.BeginForm中使用@using

来自分类Dev

为什么我们需要在IOS中使用类别?

来自分类Dev

为什么我们需要在 ReactJs 中使用 web-pack?

来自分类Dev

为什么我们需要在 Spring 中使用注解?

来自分类Dev

为什么我们需要在并发 GC 跟踪中使用 SATB 算法?

来自分类Dev

为什么我们需要在 Spring Data JPA 中使用 @Transactional 注释 Service 类

来自分类Dev

为什么不能在.env文件中使用第二个变量

来自分类Dev

下面的第一个代码段可以编译,但是第二个则不能。为什么?

来自分类Dev

为什么在下面的第一个示例和第二个示例中,VS2013为什么分别使用非虚拟和虚拟调用?

来自分类Dev

为什么要使用引用的地址给我第二个等级指针?

Related 相关文章

  1. 1

    为什么我们需要第二个std :: forward专业化?

  2. 2

    为什么我们需要在函数中的第二个参数之后初始化参数参数?

  3. 3

    如果将http重定向到https nginx,我们是否需要在第二个服务器块中使用server_name

  4. 4

    为什么下面的第二个片段显示未定义的行为?

  5. 5

    为什么要在 WriteProcessMemory() 函数的第二个参数中使用 (void*)?

  6. 6

    为什么我们在现有数据库条目的 Django 表单中首先使用实例作为第二个参数

  7. 7

    为什么我们需要在两个选择中使用 () 和?

  8. 8

    我需要在第二个“if”语句中更改什么?

  9. 9

    SQL仅使用Join从2个表中获取数据,我们还需要第二个表中的空记录

  10. 10

    我是否需要在第二个if语句中指定不使用第二个变量?如果是这样,怎么办?

  11. 11

    为什么我需要第二个 for 循环 w/ append 来制作这个列表?

  12. 12

    当我在Bash函数中使用getopts时,为什么它在第二个调用中忽略参数?

  13. 13

    为什么在下面的例子中使用 ">=" 不起作用 为什么我们必须使用“-1”?

  14. 14

    需要在Swift中使用可可绑定和核心数据来使用第二个窗口

  15. 15

    JS应该选择第二个选项,其中我们使用了selected =“ selected”

  16. 16

    为什么我们需要在C ++头文件中使用“ #if defined Identifier”?

  17. 17

    为什么我们需要在图灵的暂停证明中使用否定部分?

  18. 18

    为什么我们需要在Java中使用移位运算符?

  19. 19

    为什么我们需要在Inno Setup中使用#expr指令?

  20. 20

    为什么我们需要在Html.BeginForm中使用@using

  21. 21

    为什么我们需要在IOS中使用类别?

  22. 22

    为什么我们需要在 ReactJs 中使用 web-pack?

  23. 23

    为什么我们需要在 Spring 中使用注解?

  24. 24

    为什么我们需要在并发 GC 跟踪中使用 SATB 算法?

  25. 25

    为什么我们需要在 Spring Data JPA 中使用 @Transactional 注释 Service 类

  26. 26

    为什么不能在.env文件中使用第二个变量

  27. 27

    下面的第一个代码段可以编译,但是第二个则不能。为什么?

  28. 28

    为什么在下面的第一个示例和第二个示例中,VS2013为什么分别使用非虚拟和虚拟调用?

  29. 29

    为什么要使用引用的地址给我第二个等级指针?

热门标签

归档