文档介绍:.. .. ..
实验一 词法分析
1 . 实验要求
(1 )从源程序文件中读取有效字符并将其转换成二元组内部表示形式输出 。
2 )掌握词法分析的实现方法 。
3)实验时间 4 学时 。
4 )实验完成后 ,要提交实验报告 (包括源程序清单 )。
2 . 实验内容
主程序设计考虑 :
主程序的说明部分为各种表格和变量安排空间 (关键字和特殊符号表 )。
id 和 ci 数组分别存放标识符和常数 ;还有一些为造表填表设置的变量 。
主程序的工作部分建议设计成便于调试的循环结构 。每个循环处理一个单词 ;调用词
法分析过程 ;输出每个单词的内部码 (种别编码 ,属性值 )。 建议从文件中读取要分析的
符号串 。
词法分析过程考虑
该过程根据输入单词的第一个有效字符 (有时还需读第二个字符 ), 判断单词种别 ,
产生种别编码 。对于标识符和常数 ,需分别与标识符表和常数表中已登记的元素相比较 ,
如表中已有该元素 ,则记录其在表中的位置 ,如未出现过 ,将标识符按顺序填入数组 id
中,将常数存入数组中 ci 中,并记录其在表中的位置 。
编号 1 2 3 4 5 6 7 8 9 10
名字 int char float void const if else do while scanf
编号 11 12 13 14 15 16 17 18 19 20
. 专业 .专注 .
. .
名字
printf
returnmain
.. . .
read + – * / % =
编号
21
22
23
24
25
26
27
28
29
30
名字
= =
>
<
! =
>=
<=
&&
||
!
<>
编号
31
32
33
34
35
36
37
38
39
40
名字(
)
{
}
;
,
“
‘
++
--
三:主流程图如下 :
常 数
分析程序
入 口
开工操作
读源程序字符
是字母?
Y
N
Y
是数字?
N
其它单词
关键字和标识符
分析程序
分析程序
输出单词
的内部表示
Y
是有字符?
N
出 口
. 专业 .专注 .
.. .. ..
四:实验思路
1)我首先把这个单词的种类分成了五类 ,包括:关键字、标识符、常数、算符、界符。然后利用状态转换图进行单词的识别
2)对于关键字 、算符、界符 。因为这些单词的个数有限 。所以我单独给每个单词一个种别编码 。 能够做到每个单词的种别编码是不一样的 。 而对于常数和
标识符 ,我先把它们分别单独的作为一类 ,然后定义一个二维数组 ,分别存放
这个单词的名称和编码 。而这个编码就是这个单词在这个二维数组中的位置 ;
当遇到新的标识符或常数 ,就把这个单词放入到相应的数组中 。
( 3)然后构造一个状态转换图的程序 。把每次得到的单词先暂时存放在 temp
二维数组中 。然后用这个临时的二维数组去确定这个单词是何种类别
五:实验代码
using System;
using ;
using ;
using ;
using ;
using ;
using ;
using Sys