词法分析
变量声明:
length 保存一行字符的长度
point 输入一行的指针
构造函数:初始化mySYM,myID,myNUM,length;point指针初始=-1
调用词法分析函数Compile。
Compile:将文件(inputfile)保存到reader(字符
缓冲区BufferReader)。将缓冲区的一行存入Buffer以供操作,将该行长度保存到length中。当Buffer中数据没有处理完时进行循环调用调用GETSYS处理一个字符
GETSYS:
code存储种别码,strToken暂存字符串(可以拼接字母、数字)
调用GetChar()取得一个字符,调用GetBC(去掉空格);
处理完毕后检测ch中的字符
字母:检测到第一个字符为字母表示接下来应该是字母或数字组成的一个标识符。就将所有的后来的字母或数字与第一个字符连接起来。直到遇到一个非字母或数字输入,回退一个字符(因为前面向前查看了)
调用Reserve检查保留字表查看是否是保留字,将该标识符所属类加入到SYM表。
数字:检测到第一个字符为数字的时候检测后续是否都是数字,如果都是数字则将数字连接起来,直到遇到下一个不为数字的字符。将所有的数字连接起来插入到常量表,向SYM表加入一个INT表示一个常量。
是其他的标点符号:对不同的标点符号作相应的处理,把相应的符号加入到SYM。
GetChar:根据point指向位置从Buffer中取一个字符,当point指针小于length-1(Buffer从0开始,最后一个字符是length-1),指针后移。将point指向的Buffer中的字符保存到ch中,输出字符和其位置。如果此时point指向length-1,则表明该行将处理结束,isEnd=true。或者point指针>=length-1
也代表该行处理 结束,isEnd=true。
GetBC:如果当前ch中是换行则表明此行处理结束,isEnd=true;如果ch中是空格或制表符时再调用GetChar取得一个字符,直到ch中不再是制表符或空格。