天天看點

1028 文法

<翻譯單元>  ->  <外部聲明>

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

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

<聲明說明符>  ->  <存儲類說明符> | <類型說明符>| <類型限定符>

<存儲類說明符> -> “auto” | "register"| "static"| "extern"| "typedef"

<類型說明符>  ->“void”| "char"| "short"| "int"| "long"| "float"| "double"| "signed"| "unsigned"| <struct-or-union-specifier>| <enum-specifier>| <typedef-name>

<結構聲明>  -> <說明限定符>  <結構說明符清單>

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

<指針>  ->  "*" <類型限定符>* {<指針>}?

<類型限定符>  ->  "常量"| "volatile"

<直接說明符>  ->  <辨別符> | “(”<聲明符>“)” | <直接說明符>“[”{<常量表達式>}? “]” | <直接說明符>“(”<參數類型清單>“)” | <直接說明符>“(”{<辨別符>} *“)”

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

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

<邏輯或表達式>  -> <邏輯和表達> | <邏輯或表達式“||” <邏輯和表達>

<邏輯和表達>  ->  <包容性,或表達> | <邏輯和表達“&&”<包容性,或表達>

<含-或表達式>  ->  <異或表達> | <包容性,或表達>“|” <異或表達>

<單獨或表達式>  ->  <和表達> | <單獨或表達>“^”<和表達>

<和表達式>  ->  <平等表達> | <和表達>“&”<平等表達>

<平等表達式>  -> <關系表達式>| <平等表達>“==”<關系表達式>| <平等表達>“!=”<關系表達式>

<關系表達式> ->  <移位表達式>| <關系表達式>“<”<移位表達式>| <關系表達式>“>”<移位表達式>| <關系表達式>“<=”<移位表達式>| <關系表達式>“> =”<移位表達式>

<移位表達式>  ->  <添加劑表達>| <移位表達式>“<<”<添加劑表達>| <移位表達式>“>>”<添加劑表達>

<添加劑表達式>  ->  <乘法表達式>| <添加劑表達>“+”<乘法表達式>| <添加劑表達式>“ - ”<乘法表達式>

<乘法表達式>  ->  <鑄表達>| <乘法表達式>“*”<投表達式>| <乘表達>“/”<投表達式>| <乘法表達式>“%”<投表達式>

<投表達式>  ->  <一進制表達式>| “(”<類型名>“),”<鑄表達>

<一進制表達式>  ->  <字尾表達式>| “++”<一進制表達式>| “ - ”<一進制表達式>| <一進制算子> <鑄表達>| “sizeof的”<一進制表達式>| “sizeof的”<類型名稱>

<字尾表達式>  ->  <主表達式>| <字尾表達式>“[”<表達式>“]”| <字尾表達式>“(”{<指派表達式>} *“)”| <字尾表達式>“。” <辨別符>| <字尾表達式>“ - >”<辨別>| <字尾表達式>“++”| <字尾表達式>“ - ”

<基本表達式> -> <辨別符>| <常數>| <字元串>| “(”<表達式>“)”

<常數>  ->  <整型常量>| <字元常量>| <float 常量>| <enumeration-constant>

<表達式>  ->  <指派表達式>

| <表達式>“,”<指派表達式>

<指派表達式>  ->  <條件表達式>

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

<指派運算符>  -> “=”| “* =”| “/ =”| “%=”| “+ =”| “ - =”| “<< =”| “>> =”| “&=”| “^ =”| “| =”

<一進制操作符>  -> “&”| “*”| “+”| “ - ”| “〜”| “!”

<類型名>  ->  {<說明限定符>} + {<抽象聲明符>}

<參數類型清單>  ->  <參數清單>| <參數清單>“,”...

<參數清單> ->  <參數聲明>| <參數清單>“,”<參數聲明>

<參數聲明> ->  {<聲明說明符>} + <說明符>| {<聲明說明符>} + <抽象說明符>| {<聲明說明符>} +

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

<直接抽象說明符>  -> (<抽象說明符>)| {<直接抽象說明符>}? “[”{<常量表達式>}? “]”| {<直接抽象說明符>}? “(”{<參數類型清單>?|“)”

<枚舉說明>  -> “枚舉”<辨別>“{”<枚舉清單>“}”| “枚舉數”,“{”<枚舉清單>“}”| “枚舉數”<辨別>

<枚舉清單>  ->  <枚舉數>| <枚舉清單>“,”<枚舉數>

<枚舉數>  ->  <辨別符>| <辨別>“=”<常量表達式>

<類型定義名稱>  ->  <辨別符>

<聲明>  ->  {<聲明說明符>} + {<初始化聲明符>} *

<初始化聲明符> ->  <說明符>| <聲明符>“=”<初始化>

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

<初始化清單>  ->  <初始化>| <初始化清單>“,”<初始化>

<複合語句>  -> “{”{<申報>} * {<語句>} *“}”

<語句>  ->  <标記語句>| <表達式語句>| <複合語句>| <選擇語句>| <循環語句>| <跳轉語句>

<标記語句>  ->  <辨別符>“:”<語句>| “case”<常量表達式>“:”<語句>| “default”“:”<語句>

<表達式語句> ->  {<表達式>}? “;”

<選擇語句>  -> “if”“(”<表達式>“),”<語句>| “if”“(”<表達式>“),”<語句>“else”<聲明>| “switch”“(”<表達式>“),”<語句>

<循環語句>  -> “while”“(”<表達式>“)”<語句>| “do”<語句>“,while”“(”<表達式>“)”“;”| “for”“(”{<表達式>}?“;”{<表達式>}?“;”{<表達式>}“)”<語句>

<跳轉語句>  -> “goto”<辨別>“;”| “continue”“;”| “break”“;”| “return”{<表達式>}? “;”