实验要求:要求设计出并实现一个一遍扫描的词法语法语义分析程序,将多条简单赋值语句翻译成三地址代码,要求有一定的出错提示和错误恢复功能。
一.待分析的简单语言的语法
(1)<程序>::=begin<语句串>end
(2)<语句串>::=<语句>{;<语句>}
(3)<语句>::=<赋值语句>
(4)<赋值语句>::=ID:=<表达式>
(5)<表达式>::=<项>{+<项>|-<项>}
(6)<项>::=<因子>{*<因子>|/<因子>}
(7)<因子>::=ID|NUM|(<表达式>)
二.单词的种别编码方案
单词符号 |
种别码 |
单词符号 |
种别码 |
begin |
1 |
) |
27 |
if |
2 |
[ |
28 |
then |
3 |
] |
29 |
while |
4 |
{ |
30 |
do |
5 |
} |
31 |
end |
6 |
, |
32 |
= |
21 |
: |
33 |
== |
39 |
; |
34 |
+ |
22 |
> |
35 |
- |
23 |
< |
36 |
* |
24 |
>= |
37 |
// |
101 |
<= |
38 |
/* |
101 |
!= |
40 |
/ |
25 |
ERROR |
-1 |
( |
26 |
\0 |
1000 |
三.字母 |
四.10 |
五.数字 |
六.20 |
三.词法分析程序主要算法思想
词法分析主程序示意图
四.语法分析主要算法思想
语法分析主程序示意图
五.语义分析主要算法思想。
语义分析只是在语法分析的基础上增加了把表达式变成三地址表达式,其他函数没有变化。