0
点赞
收藏
分享

微信扫一扫

编译原理词法分析器调试过程记录

兔八哥软件爱分享 2022-04-07 阅读 53
python

 

emmm,上图是某次运行的结果,就离谱了。。。加油小马!找出bug!解决它!今天一定要写出正确的词法分析器!!!冲冲冲!

这是测试代码段,位于根目录下面的C_programmer.txt中

void hanoi(int n, char a, char b, char c)
{
	if(n == 1)
	{
		count++;
		printf("%c->%c\n",a,c);
	}
	
	else
	{
		hanoi(n - 1, a ,c, b);
		count++;
		printf("%c->%c\n",a,c);
		hanoi(n - 1, b ,a, c);
	}
	
}
 
int main()
{
	int n;

	scanf("%d",&n);
	
	hanoi(n, 'a', 'b', 'c');
	
	printf("move_times:%d\n",count);
	
	return 0;
}

通过过滤器过滤之后:

void hanoi(int n, char a, char b, char c)
{
if(n == 1)
{
count++;
printf("%c->%c",a,c);
}
else
{
hanoi(n - 1, a ,c, b);
count++;
printf("%c->%c",a,c);
hanoi(n - 1, b ,a, c);
}
}
int main()
{
int n;
scanf("%d",&n);
hanoi(n, 'a', 'b', 'c');
printf("move_times:%d",count);
return 0;
}

 说明咱过滤器的结果还是正确的!应该是下面的扫描程序出了问题。。。。

嘿嘿,该问题成功解决!

原因是:当word最后添加的是空格的时候,空格是不算入有意义的字符里面的,因此在使用

word = word[:-1]

去掉单词后其他内容的时候,需要排除空格的情况,避免错误删除了有意义的字符,即需要先进行判断:

if not line[i].isspace():

 唉,再解决程序卡在第三行运算符的识别问题吧,加油!

 终于让我找到if编号正确但是保存在token中却错误的原因了:多了一个切片!

目前最大的问题就是为啥EXCEL中只写入了Token中的一部分呢?明明我的Token都分析完了!

 调试发现还是到第三次就中断了!不是表格自动显示的原因,初步推测可能是n后多了一个空格的原因:

 于是乎,我再每个word后面都进行了去空白操作再加入word_line中:

但是,结果还是卡在了第三行!!!说明应该不是空格的原因!!!

 好吧,应该就是向excel中写入==出错了

被迫改成用openpyxl库写入token。。。

终于可以正常显示啦(hh虽然自动帮我把等号修复成空格了)!也大致明白了错误原因啦!

emmm,老师要求用二元组输出结果,于是乎,我又修改了一下程序,保留原来excel结果表的基础下,把二元式结果也写入了新建的txt文件中

在分析结果的过程中,我发现之前的第八行只有单独的一个else,结尾没有空格和界符,所以程序无法识别,输出的word_line就是空,为了修复这个bug,我增添了如下代码:

# 针对只有一个单词的情况进行处理:
if word_line == []:
    # 只可能是关键字????比如else,不能直接判断line,line后面有换行符
    # print(line)
    s = line.replace('\n', '')
    if s in reserve_word:
        # 以字典形式存入列表中
        word_line.append({s: reserve_word.index(s)})

终于!词法分析器完成!

 哦耶!充实的一天!明天开始项目视频代码调试!加油呀!冲冲冲!

附上咱亲爱的全老师的名言:

定能生慧,静纳百川!

举报

相关推荐

0 条评论