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

时间:2014-06-17 03:39:49

标签: c bnf compiler-construction

阅读this C的BNF语法我不明白这个部分:

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

还会处理id(exp, exp)id()等函数调用。这是C语法中有效的单一组合还是我遗漏了什么?如果是这样,为什么不呢:

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

1 个答案:

答案 0 :(得分:4)

BNF语法id '(' argument_exp_list ')'实际上相当于postfix_exp '(' argument_exp_list ')' 其中postfix_exp可以是primary_exp,如其l值所述。

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 ')'