天天看點

1014 C語言文法定義與C程式的推導過程

<程式>-><外部聲明>|<程式><外部聲明>

<外部聲明>-><函數定義>|<定義>

<函數定義>-><類型說明><聲明><複合語句>

<類型說明>->無傳回型|字元型|整型|單精度型

<聲明>-><指針直接說明符>|<直接說明符>

<指針>-><’*’>|<’*’指針>

<直接聲明符>-><辨別符>|<直接聲明符>’[’’]’|<直接聲明符>’[’< 常量表達式>’]’>|<辨別符>’(’ 參數表>’)’|<辨別符>’(’ ’)’|<直接聲明符 >’;’ <辨別符清單>

<辨別符清單>-><辨別符>|<辨別符清單> ’,’ <辨別符>

<常量表達式>-><條件表達式>

<參數表>-><參數聲明>|<參數表 >’,’ <參數聲明>

<參數聲明>-><聲明說明><辨別符>

<複合語句>->’{’ ’}’|’{’ <語句清單>’}’|’{’ <聲明清單 語句清單>’}’

<聲明清單>-><聲明>|<聲明清單><聲明>

<聲明>-><初始化聲明符>|<初始化聲明符清單 > ’, ’< 初始化聲明符>

<初始化聲明符>-><聲明符>|<聲明符>’=’ <初始化>

<初始化>-><指派表達式>|’{’ <初始化清單> ’}’|’{’ <初始化清單> ’, ’ ’}’

<初始化清單>-><初始化>|<初始化清單> ‘,’< 初始化>

<語句清單>-><語句>|<語句清單>

<語句>-><複合語句>|<表達式語句>|<條件語句>|<循環語句>|<跳轉語句>

<表達式語句>->’;‘|<表達式>’;‘

<條件語句>->如果<’(‘><表達式><’)‘><語句>|如果’(‘<表達式>’)‘<語句>那麼<語句>

<循環語句>->當’(’<表達式>’)‘<語句>|為’(’<表達式語句><表達式語句>’)’|為’(’<表達式語句><表達式語句><表達式>’)’<語句>

<跳轉語句>->繼續’;’|結束’;’|傳回’;’|傳回<表達式>’;’

<表達式>-><指派表達式>|<表達式>’,’<指派表達式>

<指派表達式>-><條件表達式>|<一進制表達式><指派運算符><指派表達式>

<條件表達式>-><邏輯或表達>|<邏輯或表達式>’?’<表達式>’:’<條件表達式>

<邏輯或表達式>-><邏輯與表達式>|<邏輯或表達式>或<邏輯與表達式>

<邏輯與表達式>-><包容性或表達式>|<邏輯與表達式>和<包容性或表達式>

<包容性或表達式>-><異或表達式>|<包容性或表達式>’|’<異或表達式>

<異或表達式>-><與表達式>|<異或表達式>’^’<與表達式>

<與表達式>-><平等表達式>|<與表達式>’&’<平等表達式>

<平等表達式>-><關系表達式>|<平等表達式>EQ_OP<關系表達式>|<平等表達式>NE_OP<關系表達式>

<關系表達式>-><移動表達式>|<關系表達式>’<’<移動表達式>|<關系表達式>’>’<移動表達式>|<關系表達式> LE_OP <移動表達式>|<關系表達式> GE_OP <移動表達式>

<移動表達式>-><添加表達式>|<移動表達式> LEFT_OP <添加表達式>|<移動表達式> RIGHT_OP <添加表達式>

<添加表達式>-><乘法表達式>|<添加表達式>’+’<乘法表達式>|<添加表達式>’-’<乘法表達式>

<乘法表達式>-><轉換表達式>|<乘法表達式>’*’<轉換表達式>|<乘法表達式>’/’<轉換表達式>|<乘法表達式>’%’<轉換表達式>

<轉換表達式>-><一進制表達式>|’(’<類型名稱>’)’<轉換表達式>

<一進制表達式>-><字尾表達式>| INC_OP <一進制表達式>|DEC_OP <一進制表達式>|<一進制運算符>< 轉換表達式>|位元組<一進制表達式>|位元組’(’<類型名稱>’)’

<字尾表達式>-><主要表達式>|<字尾表達式>’[’<表達式>’]’|<字尾表達式>’(’’)’|<字尾表達式>’(’<參數表達式清單>’)’|<字尾表達式>’.’<辨別符>|<字尾表達式> PTR_OP <辨別符>|<字尾表達式> INC_OP |<字尾表達式> DEC_OP

<字尾表達式>’(‘<參數表達式清單>’)’|<字尾表達式>’.’<辨別符>|<字尾表達式><PTR OP辨別符>|<字尾表達式 INC OP>|<字尾表達式 DEC OP>

<主表達式>--><辨別符>|<不變>|<字元串字面量>|’(‘<表達式>’)’

<參數表達式清單>:<指派表達式>|<參數表達式清單>’,’ <指派表達式>

<一進制運算符>:’&’|’*’|’+’|’-‘|’~’|’!’

<指派運算符>-->’=’| MUL_ASSIGN| DIV_ASSIGN| MOD_ASSIGN| ADD_ASSIGN| SUB_ASSIGN| LEFT_ASSIGN| RIGHT_ASSIGN| AND_ASSIGN| XOR_ASSIGN| OR_ASSIGN

<存儲類說明>-->TYPEDEF |EXTERN|靜态的|自動的|寄存器

<結構或聯合說明符>:<結構或聯合辨別符>’{‘<struct聲明清單>’}’|<結構或聯合>’{‘< struct聲明清單’>’}’|<結構或聯合辨別符>

<結構或聯合>:<結構>|<聯合>

< struct聲明清單>:<struct聲明>|< struct聲明清單>< struct聲明>

<struct聲明>:<說明限定表>< struct聲明清單>‘;‘

<說明限定表>--><類型說明符><說明限定表>|<類型說明符>|<類型限定><說明限定表>|<類型限定>

<結構說明符清單>--><結構說明符>|<結構說明符清單>’.’ <結構說明符>

<結構說明符>--><聲明符>|’:’<常量表達式>|<聲明符>’:’ <常量表達式>

<枚舉說明>--><枚舉>’{‘<枚舉清單>’}’|<枚舉辨別符>’{‘<枚舉清單>’}’|

<枚舉辨別符>

<枚舉清單>--><枚舉>|<枚舉清單>’;’ <枚舉>

<枚舉>--><辨別符>|<辨別符>’=’<常量表達式>

<類型限定>--><常量>|<變量>

<類型限定表>-->|<類型限定表><類型限定>

<參數類型清單>--><參數清單>|<參數清單>’.’<省略号>

<參數清單>--><參數聲明>|<參數清單>’;’ <參數聲明>

<類型名>--><說明限定表>|<說明限定表><抽象聲明符>

<抽象聲明符>--><指針>||<指針直接抽象聲明符>

<指針直接抽象聲明符>-->’(‘<抽象聲明>’)’|’[‘’]’|’[‘<常數表達式>’]’|<直接抽象聲明符>’[‘’]’|<直接抽象聲明符>’[‘<常數表達式>’]’|’(‘’)’|’(‘<參數類型清單>’)’|<直接抽象聲明符>’(‘’)’|<直接抽象聲明符>’(‘<參數類型清單>’)’

<标簽語句>--><辨別符>’;’<語句>|<案例><常數表達式>’;’<語句>|<預設>’:’<語句>