编译器之简单的类C文法

<constant-expression> ::= <conditional-expression>

 

<conditional-expression> ::=<logical-or-expression> { ? <expression> : <conditional-expression> }*

 

<logical-or-expression> ::= <logical-and-expression> { || <logical-and-expression> }*

 

<logical-and-expression> ::= <inclusive-or-expression> { && <inclusive-or-expression> }*

 

<inclusive-or-expression> ::= <exclusive-or-expression> { | <exclusive-or-expression> }*

 

<exclusive-or-expression> ::= <and-expression> { ^ <and-expression> }*

 

<and-expression> ::= <equality-expression>{ & <equality-expression> }*

 

<equality-expression> ::= <relational-expression>{ w0 <relational-expression> }*

            w0 ::=  == | !=

 

<relational-expression> ::= <additive-expression> { w1 <additive-expression> }*

            w1 ::=  > | < | <= | >=

 

<additive-expression> ::= <multiplicative-expression>{ w2 <multiplicative-expression> }*

            w2 ::= + | -

 

<multiplicative-expression> ::= <unary-expression> { w3 <unary-expression> }*

            w3 ::= * | / | %

 

<unary-expression> ::= <unary-operator> <unary-expression>

                       | <constant>

                       | ( <constant-expression> )

                       | <primary-expression>

                       | <function-call-expression>

 

<primary-expression> ::= <identifier> { [ <constant-expression> ] }*

 

<constant> ::= <integer-constant>

             | <real-constant>

 

<expression> ::= <assignment-expression> { , <assignment-expression> }*

 

<assignment-expression> ::= <primary-expression> <assignment-operator> <constant-expression>

 

<assignment-operator> ::= =

 

<unary-operator> ::= - | ~ | !

 

<type-name> ::= { const }? <type-specifier>

 

 

<type-specifier> ::= char

                   | int

                   | real

 

<declarator>  ::= <identifier>  { [ {<constant-expression>}? ] }*

 

<declaration> ::=  <type-name> <init-declarator> { <init-declarator> }*

 

<init-declarator> ::= <declarator>

                    | <declarator> = <initializer>

 

<initializer> ::= <constant-expression>

                | { <initializer-list> }

                | { <initializer-list> , }

 

<initializer-list> ::= <initializer>

                     | <initializer> , <initializer-list>

 

<original-statements> ::= <type-specifier><identifier>()<compound_statements>

 

<compound-statement> ::= { {<declaration>}* {<statement>}* }

 

<statement> ::=<expression-statement>

              | <area-statement>

              | <selection-statement>

              | <iteration-statement>

              | <return-statement>

 

<area-statement> ::= { { <statement> }* }

 

<expression-statement> ::= {<expression>}? ;

 

<selection-statement> ::= if ( <constant-expression> ) <area-statement>

                        | if ( <constant-expression> ) <statement> else <area-statement>

 

<iteration-statement> ::= while ( <constant-expression> ) <area-jump-statement>

               | for ( {<expression>}? ; {<constant-expression>}? ; {<expression>}? ) <area-jump-statement>

 

<jump-statement> ::= continue ;

                  | break ;

                  | <expression-statement>

                  | <area-jump-statement>

                  | <selection-jump-statement>

                  | <iteration-statement>

                  | <return-statement>

 

<area-jump-statement> ::= { { <jump-statement }* }

 

<selection-statement> ::= if ( <constant-expression> ) <area-jump-statement>

                        | if ( <constant-expression> ) <statement> else <area-jump-statement>

 

几点限制:

const只能声明变量,后面必须跟立即数,数组只声明不初始化

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值