/**
* initializer:
*assignment-expression
*{ initializer-list }
*{ initializer-list , }
*
* initializer-list:
*initializer
*initializer-list, initializer
*/
// see the comments near "struct astInitializer" in header file for detail.
static AstInitializer ParseInitializer(void)
{
AstInitializer init;
AstNode *tail;
CREATE_AST_NODE(init, Initializer);
// { {1,2,3},4,5,6}
if (CurrentToken == TK_LBRACE)
{
init->lbrace = TRUE;
NEXT_TOKEN;
init->initials = (AstNode)ParseInitializer();
tail = &init->initials->next;
while (CurrentToken == TK_COMMA)
{
NEXT_TOKEN;
if (CurrentToken == TK_RBRACE)
break;
*tail = (AstNode)ParseInitializer();
tail = &(*tail)->next;
}
Expect(TK_RBRACE);
}
else
{
init->lbrace = FALSE;
init->expr = ParseAssignmentExpression(); //??
}
return init;
}
为什么问号那行逗号表达式要写成赋值表达式?
* initializer:
*assignment-expression
*{ initializer-list }
*{ initializer-list , }
*
* initializer-list:
*initializer
*initializer-list, initializer
*/
// see the comments near "struct astInitializer" in header file for detail.
static AstInitializer ParseInitializer(void)
{
AstInitializer init;
AstNode *tail;
CREATE_AST_NODE(init, Initializer);
// { {1,2,3},4,5,6}
if (CurrentToken == TK_LBRACE)
{
init->lbrace = TRUE;
NEXT_TOKEN;
init->initials = (AstNode)ParseInitializer();
tail = &init->initials->next;
while (CurrentToken == TK_COMMA)
{
NEXT_TOKEN;
if (CurrentToken == TK_RBRACE)
break;
*tail = (AstNode)ParseInitializer();
tail = &(*tail)->next;
}
Expect(TK_RBRACE);
}
else
{
init->lbrace = FALSE;
init->expr = ParseAssignmentExpression(); //??
}
return init;
}
为什么问号那行逗号表达式要写成赋值表达式?