这是指函数调用的参数是否在 BNF 语法中被定义?

3

阅读这个C语言的BNF语法,我不理解其中的哪一部分:

| postfix_exp '(' argument_exp_list ')'
| postfix_exp '('           ')'

handle函数是否还支持像id(exp, exp)id()这样的函数调用?在C语法中,这是唯一有效的组合吗?如果不是,为什么不只是:

| id '(' argument_exp_list ')'
| id '('            ')' 

4
您可以通过函数指针调用函数,该函数指针可以是任意复杂的表达式,而不仅仅是'id'。 - n. m.
1个回答

4
id '(' argument_exp_list ')' 这种 BNF 语法实际上等价于 postfix_exp '(' argument_exp_list ')',其中postfix_exp可以是其左值所述的primary_exp
postfix_exp     : primary_exp
                | postfix_exp '[' exp ']'
                | postfix_exp '(' argument_exp_list ')'
                | postfix_exp '('           ')'
                | postfix_exp '.' id
                | postfix_exp '->' id
                | postfix_exp '++'
                | postfix_exp '--'

其中primary_exp是:

primary_exp     : id
                | const
                | string
                | '(' exp ')'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接