编译原理-Lab1
一、实验思路
本次实验主要是写词法分析器,对语法没有要求,所以在.g4
文件中只要写对应的词法即可。
然后是在Main
函数中处理逻辑,相应的代码在手册中都已给出,主要需要实现是
- 自己的
MyErrorListener
- 处理
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/