如何阅读抽象编程信息

时间:2017-08-24 18:44:50

标签: c

我昨天接受了测试,发现自己必须了解一些我不了解的事情。

请参阅以下页面:

declaration-list:
  declaration
  declaration-list declaration 
declaration-specifiers:
  storage-class-specifier declaration-specifiersopt
  type-specifier declaration-specifiersopt
  type-qualifier declaration-specifiersopt 
storage-class specifier: one of
  auto register static extern typedef 
type specifier: one of
  void char short int long float double signed
  unsigned struct-or-union-specifier enum-specifier typedef-name 
type-qualifier: one of
  const volatile 
struct-or-union-specifier:
  struct-or-union identifieropt { struct-declaration-list }
  struct-or-union identifier 
struct-or-union: one of
  struct union 
struct-declaration-list:
  struct declaration
  struct-declaration-list struct declaration 
init-declarator-list:
  init-declarator
  init-declarator-list, init-declarator 
init-declarator:
  declarator
  declarator = initializer 
struct-declaration:
  specifier-qualifier-list struct-declarator-list; 
specifier-qualifier-list:
  type-specifier specifier-qualifier-listopt
  type-qualifier specifier-qualifier-listopt 
struct-declarator-list:
  struct-declarator
  struct-declarator-list , struct-declarator 
struct-declarator:
  declarator
  declaratoropt : constant-expression 
enum-specifier:
  enum identifieropt { enumerator-list }
  enum identifier 

这是来自书" C编程语言"作者:Brian W. Kernighan 丹尼斯·里奇(Dennis M. Ritchie),但我在互联网和许多其他书籍上看过它。

我尝试用Google搜索,但坦率地说,我不知道如何调用它,所以我无法找到任何相关信息。我们的教授从来没有想过我们阅读它,我现在相信知道如何阅读它是非常重要的。

我正在寻找指南的参考或如何处理它的简短说明。

如果这是一个重新发布,我很抱歉,但我找不到任何相关的帖子。

2 个答案:

答案 0 :(得分:2)

第一个定义......

my.component.html:39 ERROR TypeError: Cannot read property 'description' of null
 at Object.eval [as updateRenderer] (my.component.html:40)
 at Object.debugUpdateRenderer [as updateRenderer] (services.ts:307)
 at checkAndUpdateView (view.ts:392)
 at callViewAction (view.ts:700)
 at execEmbeddedViewsAction (view.ts:670)
 at checkAndUpdateView (view.ts:389)
 at callViewAction (view.ts:700)
 at execComponentViewsAction (view.ts:644)
 at checkAndUpdateView (view.ts:392)
 at callViewAction (view.ts:700)
 at execEmbeddedViewsAction (view.ts:670)
 at checkAndUpdateView (view.ts:389)
 at callViewAction (view.ts:700)
 at execComponentViewsAction (view.ts:644)
 at checkAndUpdateView (view.ts:392)

...可以理解为:“声明列表是声明或声明列表,后跟声明。”

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

  • 声明
  • 声明声明
  • 声明声明声明

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

答案 1 :(得分:1)

它被称为语法表示法。它在C11 6.1中描述:

  
      
  1. 在本节中使用的语法表示法中,语法类别(非终结符号)由斜体类型表示,文字单词和字符集成员(终端)由粗体类型< / strong>即可。非终结符后面的冒号(:)引入了它的定义。替代定义列在单独的行中,除非以“其中一个”开头。可选符号由下标 opt 表示,因此

         

    { 表达 opt }

         

    表示括在括号中的可选表达式。

  2.   

所以,以第一个非终端为例:

  

声明列表
   声明
   声明列表声明

表示声明列表是单个声明,或者声明列表,后跟单个声明< / em>(即它将递归地定义自己)。

顺便说一句,这些声明列表是在C中输入函数参数的旧的和过时的过时方式:

some_function(a, b)
    int a;
    double b;
{
    printf("a = %d, b = %f\n", a, b);
}

int a; double b;部分是可选的声明列表double b;是单个声明。因此,声明列表以递归方式定义为一个声明列表,该声明列表是一个声明,或声明列表后跟一个声明。

要实际内化这些句法结构的含义,您最好阅读C11 standard draft n1570 onlinePDF version。另请注意,语法只是给出了C程序的语法,但C程序的约束和语义是用文本写的。