词法分析

本文主要介绍了编译原理中的词法分析,希望对您有所帮助

一. 完成的功能

输入:所给文法的源程序字符串

输出:二元组 ( syn , token或sum)

syn为单词种别码 token为依次读入的字符串 sum为整数

例:测试案例

1
2
3
4
begin  
x:=9; //注释部分
if x>0 then x:=2*x+1/3;
end #

二. 主体框架

  1. 主函数

  2. analyzer函数

三. 重难点

  1. 读入多行字符串

    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个字节并将其转换为相应的字符。

    考虑到字符串中有可能有中文 所以采用缓冲流

  2. analyzer

    关键点在怎么做到分割串的效果

    挨个读入字符 根据第一个字符的情况分开讨论 思路详见流程图

    特别注意 当判断不符合时记得即使回退指针(index)

四. 收获

​ 因为是第一次实验词法分析,实验思路整体简单,主要收收获吧还是在这个过程中复习了下java的语法,特别是读入多行字符串的处理,还有记得设初值为空,这个问题还花了我小半个小时愣是没发现,不过这半小时下来对代码倒是熟悉了不少。还有些不足就是没有实现可视化窗口,这个还没有学会,争取在语法分析写完之后可以将两者合起来可视化。


词法分析
http://kaikai12321.github.io/2021/05/01/词法分析/
作者
Hou Kai
发布于
2021年5月1日
许可协议