前言:本实验采用自上而下的方法实现算术表达式的语法分析器。只是实现了对加减乘数和带括号的语法分析,判断语法的正确性。

一 实验要求:

1)程序通过标准输入按行读取用户输入,表达式在1行内读完。

2)程序对用户输入的内容首先进行词法分析处理(可以复用实验一的部分代码,由于词法规则更简单,可以大大简化),词法分析得到的词法单位对应文法中的终结符。//代码太长直接就用词法分析的结果进行语法分析。

3)对于用户输入的表达式,如果经过分析后语法正确,给出相应提示。如果分析过程中遇到错误不需要尝试恢复分析,停止该次分析过程即可,但应尽量给出说明性较强的错误提示。

 

下面给出一些验证语法分析结果正确性的测试用例:

 

正确:a+3*( b + c/10) -4 +5


错误:a+3 ( b + c/10)


错误:(1+2)(3-4)


错误:(1+2

 二:假设词法分析已经正确的完成,只进行语法分析

比如以  a+3*( b + c/10) -4 +5为例,进行词法分析后得到的结果为

 1 (29,a)
 2 (12,+)
 3 (28,3)
 4 (14,*)
 5 (21,()
 6 (29,b)
 7 (12,+)
 8 (29,c)
 9 (15,/)
10 (28,10)
11 (22,))
12 (13,-)
13 (28,4)
14 (12,+)
15 (28,5)

注意,上面的结果第一个参数是种别码,种别码的声明如下(关于词法分析的过程可具体参考我之前写的词法分析 https://www.cnblogs.com/henuliulei/p/10597281.html),当然种别码可以自己声明。

 1 begin  1
 2 end  2
 3 if  3
 4 then 4
 5 while  5
 6 do  6
 7 const  7
 8 var  8
 9 call  9
10 procedure  10
11 odd  11
12 +  12
13 -  13
14 *  14
15 /  15
16 =  16
17 #  17
18 <  18
19 >  19
20 :=  20
21 (  21
22 )  22
23 ,  23
24 .  24
25 ;  25
26 (*多行注释*)    26
27 //单行注释  27
28 常数    28
29 标识符    29
View Code

相关文章: