选择部分C语言的语法成分或选择简单语言,采用递归下降的语法制导翻译技术,设计一个一遍扫描的词法语法语义分析程序。设计并实现一个一遍扫描的词法语法语义分析程序,将多条简单赋值语句翻译成后缀式或三地址代码,要求有一定的出错提示和错误恢复功能。
一 词法说明
(1)关键字:begin if then while do end(都为小写)
(2)运算符和界符:= + - * / < <= <> > >= = ; ( ) #
(3)其它单词是标识符ID 和整型基数 NUM ,通过以下正规式定义:
ID = letter (letter | digit)
NUM = digit digit*
(4)空格由空白,制表符以及换行符组成。一般用于分隔ID,NUM,运算,界符和关键字,词法分析阶段通常被忽略。
二 语法说明
(1)<程序>:: = begin<语句串>end
(2)<语句串>:: = <语句>{;<语句>}
(3)<语句>:: = <赋值语句>
(4)<赋值语句>:: = ID:= <表达式>
(5)<表达式>:: = <项>{+<项> | -<项>}
(6)<项>:: = <因子>{*<因子> | /<因子>}
(7)<因子>:: = ID | NUM (<表达式>)
三 种别码编码方案
单词符号 |
种别码 |
单词符号 |
种别码 |
begin |
1 |
( |
26 |
if |
2 |
) |
27 |
then |
3 |
[ |
28 |
while |
4 |
] |
29 |
do |
5 |
{ |
30 |
end |
6 |
} |
31 |
letter(letter|digit)* |
10 |
, |
32 |
digit digit* |
11 |
: |
33 |
:= |
18 |
; |
34 |
= |
21 |
> |
35 |
+ |
22 |
< |
36 |
- |
23 |
>= |
37 |
* |
24 |
<= |
38 |
/ |
25 |
== |
39 |
!= |
40 |
ERROR |
-1 |
四 算法思想
1.词法分析算法思想
概述:
算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字种类,拼出相应的单词符号。
主程序流程图:
词法分析程序流程:
2.语法分析算法思想
主程序:
1)置初值
2)调用scaner读下一个单词符号
3)调用 Irparser 函数
4)结束
过程和函数:
递归下降分析:
语句串分析
statement语句分析函数
expression表达式分析函数
term分析函数
factor分析
3.语义分析算法思想
主程序:
1)置初值
2)调用scaner
3)调用 Irparser
4)输出四元组
5)结束