c语言设计文法
时间: 2024-02-16 15:05:06 浏览: 30
C语言的文法可以用BNF(巴克斯-诺尔范式)表示,如下:
```
<program> ::= <declaration-list>
<declaration-list> ::= <declaration>
| <declaration-list> <declaration>
<declaration> ::= <var-declaration>
| <fun-declaration>
<var-declaration> ::= <type-specifier> <id-list> ;
<type-specifier> ::= int
| float
| char
<id-list> ::= <id>
| <id-list> , <id>
<id> ::= <identifier>
| <identifier> = <expression>
<fun-declaration> ::= <type-specifier> <identifier> ( <params> ) <compound-stmt>
<params> ::= <param-list>
| void
<param-list> ::= <param>
| <param-list> , <param>
<param> ::= <type-specifier> <identifier>
<compound-stmt> ::= { <local-declarations> <statement-list> }
<local-declarations> ::= <var-declaration>
| <local-declarations> <var-declaration>
<statement-list> ::= <statement>
| <statement-list> <statement>
<statement> ::= <expression-stmt>
| <compound-stmt>
| <selection-stmt>
| <iteration-stmt>
| <return-stmt>
<expression-stmt> ::= <expression> ;
| ;
<selection-stmt> ::= if ( <expression> ) <statement>
| if ( <expression> ) <statement> else <statement>
<iteration-stmt> ::= while ( <expression> ) <statement>
<return-stmt> ::= return ;
| return <expression>
<expression> ::= <var> = <expression>
| <simple-expression>
<var> ::= <identifier>
| <identifier> [ <expression> ]
<simple-expression> ::= <additive-expression> <relop> <additive-expression>
| <additive-expression>
<additive-expression> ::= <term>
| <additive-expression> + <term>
| <additive-expression> - <term>
<term> ::= <factor>
| <term> * <factor>
| <term> / <factor>
<factor> ::= ( <expression> )
| <var>
| <call>
| <number>
<call> ::= <identifier> ( <args> )
<args> ::= <arg-list>
| void
<arg-list> ::= <expression>
| <arg-list> , <expression>
<relop> ::= <=
| <
| >=
| >
| ==
| !=
```
其中,`<program>`是C语言程序的起始符号,整个程序由一个或多个声明组成;`<declaration>`可以是变量声明或函数声明;`<var-declaration>`定义变量的类型和标识符;`<fun-declaration>`定义函数的返回类型、函数名、参数类型和参数名;`<compound-stmt>`包含局部变量声明和语句列表;`<statement>`包括表达式语句、复合语句、选择语句、循环语句和返回语句;`<expression>`是算术或关系表达式;`<var>`表示变量或数组元素;`<call>`表示函数调用;`<args>`表示函数参数;`<relop>`表示关系运算符。