我昨天接受了测试,发现自己必须了解一些我不了解的事情。
请参阅以下页面:
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搜索,但坦率地说,我不知道如何调用它,所以我无法找到任何相关信息。我们的教授从来没有想过我们阅读它,我现在相信知道如何阅读它是非常重要的。
我正在寻找指南的参考或如何处理它的简短说明。
如果这是一个重新发布,我很抱歉,但我找不到任何相关的帖子。
答案 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中描述:
- 醇>
在本节中使用的语法表示法中,语法类别(非终结符号)由斜体类型表示,文字单词和字符集成员(终端)由粗体类型< / strong>即可。非终结符后面的冒号(:)引入了它的定义。替代定义列在单独的行中,除非以“其中一个”开头。可选符号由下标 opt 表示,因此
{ 表达 opt }
表示括在括号中的可选表达式。
所以,以第一个非终端为例:
声明列表:
声明
声明列表声明
表示声明列表是单个声明,或者声明列表,后跟单个声明< / 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 online或PDF version。另请注意,语法只是给出了C程序的语法,但C程序的约束和语义是用文本写的。