【问题标题】:Is this like function call arguments are defined in the BNF grammar?这是否像 BNF 语法中定义的函数调用参数?
【发布时间】:2014-06-17 03:39:48
【问题描述】:

thisC的BNF语法没看懂这是哪一部分:

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

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

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

【问题讨论】:

  • 可以通过函数指针调用函数,可以是任意复杂的表达式,而不仅仅是'id'。

标签: c bnf compiler-construction


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多