2014-06-17 77 views
3

閱讀this C'S BNF語法我不明白其中部分原因:這就像函數調用參數在BNF語法中定義的一樣嗎?

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

確實也處理函數調用像id(exp, exp)id()。這是在C語法中有效的單一組合還是我錯過了某些東西?如果是這樣,爲什麼不乾脆:

| id '(' argument_exp_list ')' 
| id '('   ')' 
+3

可以經由一個函數指針,其可以是任意複雜的表達式,而不僅僅是「ID」調用一個函數。 –

回答

4

的BNF語法id '(' argument_exp_list ')'實際上相當於postfix_exp '(' argument_exp_list ')' 其中postfix_exp可作爲其L值規定一個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 ')' 
相關問題