编译原理―词法分析器(Java)

这里主要记一下学习的过程。


开始写的时候,我理解的词法分析,就是分析字符串嘛。所以只是写了对字符串的分析。


具体就是我们都知道,如果是分析一段代码的话,代码里会有空格,括号,算术符号,数字,还有所谓的关键字。所以我是将字母定义为状态1,数字为状态2,空格或者是换行符定义为状态3,其它为状态4。我们先把关键字,算术符号等穷举出来存入到字符数组中,接下来举例分析一下工作的流程。,比如说int a = 2;int b = a * 3;我们是将一整个字符串都存在一个字符数组中。利用for循环一个字符一个字符的进行读取判断。所以第一个字符为i,我们开始的状态为空,这里置为1,并且把i存入另一个字符数组中,接着下一个,为n,还是字符,状态不变,同时存入字符数组,类似的,到空格这里,状态为3,(这里我们有两个状态,一个是现在的状态,另一个是上一个字符的状态)。当当前状态和上一状态不相同时,空格不存入字符数组,对当前字符数组中的字符串进行分析,与已存储的关键字,算术符号等一一进行比较,最后得出结果,为关键字。后面的类似。


但是这样做存在一个问题,就是比如说我这里有一个变量a4,最后就会分析成a为变量,4为数字,其实a4就是一个变量。然后我就思考有没有其他的方式,翻了一下书。才发现词法分析器的确是关于字符串的分析,但那只是一部分,重要的是你要理解词法分析器是做什么用的,它的存在有什么意义。


这里讲下我的理解,词法分析器既然是分析代码的,那么分析后的结果尽量就要准确。词法分析器就是先从字符串中取出一段字符,放入缓冲区进行分析,得出结论后,继续先后分析。所以怎么更准确的选取就是需要考虑的。首先对于字符分成关键字,算术符号,关系运算符,分界符,标识符。我们都知道,选取分界符肯定是合理的,但是对于字符串分析器的分析并没有任何帮助。这里我是选择空格和换行符为选取规则的,同时,如果遇到分界符,算术符号,关系运算符,也会停止读取。这样字符串分析器只要分析是关键字、还是标识符、还是数字了。这里以分析FORTRAN语言为例。

种别码我这里是自己设置的,可能有问题。(如图)


代码如下:(只贴出部分关键代码)

    p
  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值