gsize_typeifori0iIdsizeiifstricmpstrToke
Idic_str0Id_Numi1
fbreakifId_Num0Idpush_backstrToke
Tupletti14tjIdsizeretur
telseTupletti14tjId_Numretur
telseTupletticodetj1retur
t
此段代码主要是对标识符的处理,若读到一个字母,则一直往后读,直到读到的字符不是一个字母或数字,然后调用Reserve函数判断此字符串是不是关键字,若是关键字则返回此关键字的种别编码;若是标识符,则查标识符表,若标识符表中无此标识符,则将此标识符加入标识符表,然后返回标识符的种别编码和在标识符表中的位置。最后将字符指针向前移一位
elseifIsDigitchwhileIsDigitchCo
catchchfgetcfp1li
eNumfseekfp11L1li
eNumi
tId_Num0vectorstri
gsize_typei
ffori0iCo
sta
tsizeiifstrcmpstrToke
Co
sta
tic_str0Id_Numi1breakifId_Num0Co
sta
tpush_backstrToke
Tupletti15tjCo
sta
tsizeretur
tTupletti15tjId_Numretur
t
此段代码主要是对常数的处理,由于过程和上述对标识符的处理类似,故不再详细描述。
测试报告:
测试用例:测试用例Programexamplevari
tjm
Begi
thereisacomme
ti2j6m3thereisacomme
t
jmIf
3a
d
5the
jj1e
d测试结果:测试结果
ff测试用例:测试用例programaavari
tabegi
a2whilea10doifa3the
Hereisacomme
tbegi
ifa5the
a4aelsea2ae
da
othercomme
telseaa1e
d测试结果:测试结果
ff实验总结:通过这次实验,掌握了词法的形式化描述,熟悉了状态转换图,掌握了词
法分析的一些基本思想,实验中也遇到了不少问题,但是通过查询有关资料,都一一解决了,学到了不少的东西。最后,感谢易萍雯老师的精心讲解。:附件(源代码)
i
clude