Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何阅读抽象编程信息_C - Fatal编程技术网

C 如何阅读抽象编程信息

C 如何阅读抽象编程信息,c,C,昨天我参加了一次考试,我发现自己必须理解一些我不知道的东西 请参阅下页: 声明列表: 宣言 申报表申报 声明说明符: 存储类说明符声明说明符sopt 类型说明符声明说明符sopt 类型限定符声明说明符sopt 存储类说明符:其中一个 自动注册静态外部类型定义 类型说明符:其中一个 void char short int long float双符号 无符号结构或联合说明符枚举说明符typedef name 类型限定符:其中一个 常量挥发性 结构或联合说明符: 结构或联合标识符opt{struct

昨天我参加了一次考试,我发现自己必须理解一些我不知道的东西

请参阅下页:

声明列表:
宣言
申报表申报
声明说明符:
存储类说明符声明说明符sopt
类型说明符声明说明符sopt
类型限定符声明说明符sopt
存储类说明符:其中一个
自动注册静态外部类型定义
类型说明符:其中一个
void char short int long float双符号
无符号结构或联合说明符枚举说明符typedef name
类型限定符:其中一个
常量挥发性
结构或联合说明符:
结构或联合标识符opt{struct declaration list}
结构或联合标识符
结构或联合:一种
结构联合
结构声明列表:
结构声明
结构声明列表结构声明
初始化声明器列表:
初始化声明器
初始化声明器列表,初始化声明器
初始化声明器:
声明人
声明符=初始值设定项
结构声明:
说明符限定符列表结构声明符列表;
说明符限定符列表:
类型说明符说明符限定符listopt
类型限定符说明符限定符listopt
结构声明器列表:
结构声明器
结构声明器列表,结构声明器
结构声明器:
声明人
declaratoropt:常量表达式
枚举说明符:
枚举标识符对象{枚举器列表}
枚举标识符
这是来自Brian W.Kernighan的《C编程语言》一书 丹尼斯·M·里奇,但我在网上和其他许多书上都看到了

我试着用谷歌搜索它,但坦率地说,我不知道它叫什么,所以我找不到任何相关信息。我们的教授从来没有让我们读过它,我现在相信知道如何读它是极其重要的

我正在寻找参考指南或简短的解释如何处理它


很抱歉,如果是转发,我找不到任何相关帖子。

第一个定义

declaration-list:
    declaration
    declaration-list declaration
…可以理解为:“声明列表是声明或声明列表,后跟声明。”

此递归定义允许以下内容作为声明列表的示例:

  • 声明
  • 声明
  • 声明
  • 等等

完整的语法定义将包含描述构成有效声明的内容的附加规则,依此类推。

它被称为语法表示法。其描述见:

  • 在本条款中使用的语法表示法中,语法类别(非终结符)用斜体表示,文字词和字符集成员(终结符)用粗体表示。非终结符后面的冒号(:)引入其定义。备选定义列在单独的行中,除非前面有“其中一个”字样。可选符号由下标opt表示,因此

    {expressionopt}

    指示括在大括号中的可选表达式

  • 因此,以第一个非终端为例:

    申报清单:
    声明
    申报表申报

    意味着一个声明列表是一个单独的声明,或者一个声明列表后跟一个单独的声明(即,它将递归地定义自己)

    顺便说一句,这些声明列表是在C中键入函数参数的古老而过时的方式:

    some_function(a, b)
        int a;
        double b;
    {
        printf("a = %d, b = %f\n", a, b);
    }
    
    inta;双b部分为可选声明列表,
    双b是一个单独的声明。因此,声明列表被递归地定义为一个声明的声明列表,或者后面跟一个声明的声明列表



    要真正将这些句法结构的意义内化,您最好阅读或。另外请注意,语法只给出了C程序的语法,但C程序的约束和语义是以文本形式编写的。

    这是一种正式的上下文无关语法表示法,实际上它不是真正的BNF,而是一些其他表示法(例如,“其中之一”不是BNF,它应该是
    :=
    ,而不是简单的
    ).它被称为:正式语法符号。不是严格的BNF(如果有的话)。如上所述,
    ::=
    和选择符号与经典BNF中的符号不同(在BNF中是
    |
    ,但此处是换行和缩进以及“其中之一”)。但想法是一样的。如果你理解一个,你就理解另一个。带有
    opt
    下标的东西是语法中的可选项。谢谢!这就是我要找的。我找到了这本书使用的语法: