天天看點

文法分析

<translation-unit> ::= {<external-declaration>}*

<external-declaration> ::= <function-definition>

| <declaration>

<翻譯機關>:= {對外聲明> } *      //函數的定義

<declaration-specifier> ::= <storage-class-specifier>            //類的定義

| <type-specifier>

| <type-qualifier>

<存儲類說明符>::=“自動”      //四種存儲類型,自動存儲期和靜态存儲期,外部變量,定義類型

| "register"

| "static"

| "extern"

| "typedef"

<type-specifier> ::= "void"        //類型說明符

| "char"

| "short"

| "int"

| "long"

| "float"

| "double"

| "signed"

| "unsigned"

| <struct-or-union-specifier>

| <enum-specifier>

| <typedef-name>

<struct-or-union-specifier> ::= <struct-or-union> <identifier> "{" {<struct-declaration>}+ "}"      //結構或聯合說明符

| <struct-or-union> "{" {<struct-declaration>}+ "}"

| <struct-or-union> <identifier>

<struct-or-union> ::= "struct"       //結構體

| "union"

<struct-declaration> ::= {<specifier-qualifier>}* <struct-declarator-list>      //結構聲明

<specifier-qualifier> ::= <type-specifier>           //限定類型說明符

<struct-declarator-list> ::= <struct-declarator>        //struct聲明

| <struct-declarator-list> "," <struct-declarator>    

<struct-declarator> ::= <declarator>                       //struct聲明

| <declarator> ":" <constant-expression>

| ":" <constant-expression>

<declarator> ::= {<pointer>}? <direct-declarator>      

<pointer> ::= "*" {<type-qualifier>}* {<pointer>}?     //指針

<type-qualifier> ::= "const"          //const常量,是一個c語言關鍵字

| "volatile"

<direct-declarator> ::= <identifier>        //直接聲明,辨別符

| "(" <declarator> ")"

| <direct-declarator> "[" {<constant-expression>}? "]"

| <direct-declarator> "(" <parameter-type-list> ")"

| <direct-declarator> "(" {<identifier>}* ")"

<constant-expression> ::= <conditional-expression>           //條件表達式

<conditional-expression> ::= <logical-or-expression>                //三位運算符

| <logical-or-expression> "?" <expression> ":" <conditional-expression>

<logical-or-expression> ::= <logical-and-expression>            //或

| <logical-or-expression "||" <logical-and-expression>

<logical-and-expression> ::= <inclusive-or-expression>          //與

| <logical-and-expression "&&" <inclusive-or-expression>

<inclusive-or-expression> ::= <exclusive-or-expression>        

| <inclusive-or-expression> "|" <exclusive-or-expression>

<exclusive-or-expression> ::= <and-expression>                    //異或

| <exclusive-or-expression> "^" <and-expression>

<and-expression> ::= <equality-expression>                           //與

| <and-expression> "&" <equality-expression>

<equality-expression> ::= <relational-expression>

| <equality-expression> "==" <relational-expression>                //取值

| <equality-expression> "!=" <relational-expression>                 //不等于

<relational-expression> ::= <shift-expression>

| <relational-expression> "<" <shift-expression>                        //小于

| <relational-expression> ">" <shift-expression>                        //大于

| <relational-expression> "<=" <shift-expression>                      //小于等于

| <relational-expression> ">=" <shift-expression>                      //大于等于

<shift-expression> ::= <additive-expression>                            //位運算符

| <shift-expression> "<<" <additive-expression>                        

| <shift-expression> ">>" <additive-expression>

<multiplicative-expression> ::= <cast-expression>                 //'*,/,%'

| <multiplicative-expression> "*" <cast-expression>

| <multiplicative-expression> "/" <cast-expression>

| <multiplicative-expression> "%" <cast-expression>

<cast-expression> ::= <unary-expression>            //一進制運算符

| "(" <type-name> ")" <cast-expression>

<unary-expression> ::= <postfix-expression>

| "++" <unary-expression>               //自增

| "--" <unary-expression>                 //自減

| <unary-operator> <cast-expression>

| "sizeof" <unary-expression>                   //動态配置設定空間

| "sizeof" <type-name>