谭子悦 201250093
本次实验的目标为:使用 ANTLRv4 编写一个 SysY 的词法分析器。
主要实现过程分为如下几步:
SysYLexer.g4
文件中编写相应的词法规则SysYLexer.java
实验要求:若 Lexer 在分析过程中发现错误,则仅输出全部错误而不输出正确内容,因此主程序需要通过某种途径的得知 Lexer 出现了分析错误,并在所有错误输出后中止分析。
为了实现这一要求,暴力让 Listener 一旦识别到错误就退出是肯定不可以的,因此我在 Listener 内添加了 field errorHappened
与相应的 getter hasErrorHappened()
,使 Listener 一旦监听到错误便将该 boolean value 设置为 true,随后主程序在调用 sysYLexer.getTokens()
后立刻检查 hasErrorHappened()
,若是,则立刻退出程序。
// Get tokens
var tokens = sysYLexer.getAllTokens();
// Error exit
if (myErrorListener.hasErrorHappened()) {
return;
}