词法分析
本文主要介绍了编译原理中的词法分析,希望对您有所帮助
一. 完成的功能
输入:所给文法的源程序字符串
输出:二元组 ( syn , token或sum)
syn为单词种别码 token为依次读入的字符串 sum为整数
例:测试案例
1
2
3
4
begin
x:=9; //注释部分
if x>0 then x:=2*x+1/3;
end #
二. 主体框架
主函数
analyzer函数
三. 重难点
读入多行字符串
1
2
3
4
5
6
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
do{
input=stdin.readLine();
last_input+=input;
ch=input.charAt(input.length()-1); //得到一行中最后一个字符
}while(ch!='#'); //输入以#字符结尾InputStreamReader类与其他输入流一起工作。它也被称为字节流和字符流之间的桥梁。这是因为InputStreamReader从输入流中读取作为字符的字节。
例如,某些字符需要2个字节才能存储在存储器中。要读取此类数据,我们可以使用输入流读取器,该读取器一起读取2个字节并将其转换为相应的字符。
考虑到字符串中有可能有中文 所以采用缓冲流
analyzer
关键点在怎么做到分割串的效果
挨个读入字符 根据第一个字符的情况分开讨论 思路详见流程图
特别注意 当判断不符合时记得即使回退指针(index)
四. 收获
因为是第一次实验词法分析,实验思路整体简单,主要收收获吧还是在这个过程中复习了下java的语法,特别是读入多行字符串的处理,还有记得设初值为空,这个问题还花了我小半个小时愣是没发现,不过这半小时下来对代码倒是熟悉了不少。还有些不足就是没有实现可视化窗口,这个还没有学会,争取在语法分析写完之后可以将两者合起来可视化。