编译原理-Lab1

一、实验思路

本次实验主要是写词法分析器,对语法没有要求,所以在.g4文件中只要写对应的词法即可。

然后是在Main函数中处理逻辑,相应的代码在手册中都已给出,主要需要实现是

  1. 自己的MyErrorListener
  2. 处理tokens的输出

MyErrorListener

首先需要知道代码是如何调用这个类的,所以我在实现的时候先将BaseErrorListener中的函数全部拷贝到MyErrorListener中,然后对每个函数增加一个System.out.println(...),这样就可以知道在出现错误是会调用哪一个函数,最后发现是syntaxError函数,然后就可以去Lexer类中找到对应调用位置,查看是如何调用这个函数,最后编写这个函数。

tokens输出

首先确定getAllTokens函数返回的类型=>List<? extends Token>

在遍历token列表时调用Token类中对应函数来获取行号、类型等相关信息,再做输出。

注意:出现错误时,只输出错误信息。

二、碰到的问题

1、输出格式

注意输出格式要严格按照手册要求。

2、INTEGR_CONST的处理

注意八进制数和十六进制数的处理,输出token时是需要输出其十进制值。


编译原理-Lab1
http://example.com/2022/11/10/compilation-principle/compilation-principle-lab1/
作者
zhc
发布于
2022年11月10日
许可协议