编译原理实验报告 合肥工业大学计算机科学与技术 完成日期:2 0 1 3
3 实验一 词法分析设计 一、实验功能: 对输入的txt 文件内的内容进行词法分析: 由文件流输入test
txt 中的内容, 对文件中的各类字符进行词法分析 打印出分析后的结果; 二、程序结构描述:(源代码见附录) 1、利用 Key[]进行构造并存储关键字表;利用 optr[]进行构造并存储运算符表;利用 separator[]进行构造并存储分界符表; 2、bool IsKey(string ss) {}判断是否是关键字函数若是关键字返回 true,否则返回 false; bool IsLetter(char c) {}判断当前字符是否字母,若是返回 true,否则返回 false; bool IsDigit(char c) {}判断当前字符是否是数字,若是返回 true,否则返回 false; bool IsOptr(string ss) {}判断当前字符是否是运算符,若是返回 true,否则返回 false; bool IsSeparator(string ss) {}判断当前字符是否是分界符,若是返回 true,否则返回 false; void analyse(ifstream &in) {}分析函数构造; 关系运算符通过 switch 来进行判断; 三、实验结果 实验总结: 词法分析的程序是自己亲手做的,在实现各个函数时花了不少功夫, 1、要考虑到什么时候该退一字符,否则将会导致字符漏读甚至造成字符重复读取
2、在实现行数和列数打印时要考虑到 row ++和 line++应该放在什么位置上才可以,如当读取一个\n 时line 要增加一,而 row 需要归 0 处理,在读取某一字符串或字符后 row 需要加一; 3、对于关系运算符用 sw itch 结构进行选择判断即可解决一个字符和