# 一、题目
利用 c 语言编制递归下降分析程序,并对简单语言进行语法分析。
# 二、种别码
| 单词符号 | 种别码 | 单词符号 | 种别码 |
| --------------------- | ------ | ------------------- | ------ |
| begin | 1 | >= | 24 |
| if | 2 | = | 25 |
| then | 3 | ; | 26 |
| while | 4 | ( | 27 |
| do | 5 | ) | 28 |
| end | 6 | == | 29 |
| Letter(letter\|digit)* | 10 | [ | 30 |
| Digit digit* | 11 | ] | 31 |
| + | 13 | { | 32 |
| - | 14 | } | 33 |
| * | 15 | , | 34 |
| / | 16 | != | 35 |
| : | 17 | 注释(letter\|digit)* | 36 |
| := | 18 | /* | 37 |
| < | 20 | */ | 38 |
| <> | 21 | \|\| | 39 |
| <= | 22 | && | 40 |
| > | 23 | # | 0 |
# 三、程序运行说明
在实验一的基础上,对输入的单词串进行语法分析,如果输入的句子文法正确,则打印输出成功的信息,打
印“success”,否则输出每个错误的原因和所在的行号。
实现过程:用扩充的 BNF 来进行递归下降分析
```c++
<程序>::=begin<语句串>end
<语句串>::=<语句> {; <语句>}
<语句>::=<赋值语句>|<注释语句>
<赋值语句>::=ID:
=<表达式>
<表达式>::=<项> {+<项>|-<项>}
<项>::=<因子> {*<因子>|/<因子>}
<因子>::=ID|NUM|(<表达式>)
```
运行结果:
![](https://www.writebug.com/myres/static/uploads/2022/1/26/a807162254f077415fa5bef3144878bd.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/1/26/1b5aee73a3358165eb7e71064ebfcb42.writebug)
如果后面没有注释*/,默认把后面的内容全部注释掉
![](https://www.writebug.com/myres/static/uploads/2022/1/26/7e4af399ad67295b487396e5bdb66c12.writebug)