《编译原理》实验二句法分析器

《编译原理》实验二
句法分析器

考虑下面的C语言子集的文法,其中<>括起来的为非终结符,粗体为终结符。
<statement_list>

<statement_list>
| <statement_list>

<expression_statement>
| <selection_statement>
| <iteration_statement>

<expression_statement> ;
| ;

<assignment_expression>
| , <assignment_expression>

<assignment_expression> <equality_expression>
| ID = <assignment_expression>

<equality_expression> <relational_expression>
| <equality_expression> == <relational_expression>
| <equality_expression> != <relational_expression>

<relational_expression> <additive_expression>
| <relational_expression> < <additive_expression>
| <relational_expression> > <additive_expression>
| <relational_expression> <= <additive_expression>
| <relational_expression> >= <additive_expression>

<additive_expression> <multiplicative_expression>
| <additive_expression> + <multiplicative_expression>
| <additive_expression> - <multiplicative_expression>

<multiplicative_expression> <primary_expression>
| <multiplicative_expression> * <primary_expression>
| <multiplicative_expression> / <primary_expression>

<primary_expression> ID | NUM | STRING | ( )

<selection_statement> IF ( )

<iteration_statement> WHILE ( )
| DO WHILE ( ) ;

要求:对给定的C语言程序进行句法分析,输出得到的分析树。
例如,下面的源程序代码
sum = 0.0;
x = 1.0;
while (x <= 100) sum = sum + x;
句法分析结果为

|-- <statement_list>
|-- <statement_list>
| |-- <statement_list>
| | |--
| | |-- <expression_statement>
| | |--
| | | |-- <assignment_expression>
| | | |-- ID
| | | |-- =
| | | |-- <assignment_expression>
| | | |-- <equality_expression>
| | | |-- <relational_expression>
| | | |-- <additive_expression>
| | | |-- <multiplicative_expression>
| | | |-- <primary_expression>
| | | |-- NUM
| | |-- ;
| |--
| |-- <expression_statement>
| |--
| | |-- <assignment_expression>
| | |-- ID
| | |-- =
| | |-- <assignment_expression>
| | |-- <equality_expression>
| | |-- <relational_expression>
| | |-- <additive_expression>
| | |-- <multiplicative_expression>
| | |-- <primary_expression>
| | |-- NUM
| |-- ;
|--
|-- <iteration_statement>
|-- WHILE
|-- (
|--
| |-- <assignment_expression>
| |-- <equality_expression>
| |-- <relational_expression>
| |-- <relational_expression>
| | |-- <additive_expression>
| | |-- <multiplicative_expression>
| | |-- <primary_expression>
| | |-- ID
| |-- <=
| |-- <additive_expression>
| |-- <multiplicative_expression>
| |-- <primary_expression>
| |-- NUM
|-- )
|--
|-- <expression_statement>
|--
| |-- <assignment_expression>
| |-- ID
| |-- =
| |-- <assignment_expression>
| |-- <equality_expression>
| |-- <relational_expression>
| |-- <additive_expression>
| |-- <additive_expression>
| | |-- <multiplicative_expression>
| | |-- <primary_expression>
| | |-- ID
| |-- +
| |-- <multiplicative_expression>
| |-- <primary_expression>
| |-- ID
|-- ;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太极生两鱼

要天天开心哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值