DOS命令下Antlr中的System语句无法执行的问题

在学习Antlr的过程中,遇到了一个问题,花了好几天的时间才弄明白原因,所以写出来和大家共享一下。问题是:在.g的文件中加入一个输出语句,如图中所示。


本来的目标是想在DOS命令下,测试Antlr通过debug命令生成的__Test__.java文件,使其执行上图中所示的输出语句,即输入"int x;",想得到的输出是“int”,但是一直无法实现(在Antlr中可以实现)。

于是就开始分析原因:

我一开始使用的代码都是在debug模式下生成的,如图所示(绿色的甲壳虫),通过分析代码发现,在这种模式下生成的CminusParser.java文件里边的构造方法,如下所示:

而自动生成的测试文件__Test__.java中,调用CminusParser.java中的构造方法如下图所示:


发现了这一细节后,我有采用别的方式来生成代码,使用antlr的Generate –》Generate Code命令生成代码,发现CminusParser.java文件里边的构造方法,如下所示:


自己写的测试类中,调用CminusParser.java中的构造方法如下所示:

CminusParser g = new CminusParser(tokens);

最后测试通过了,原来是因为在两种方式下生成代码的构造方法的参数不一样。我只是发现了问题所在,但是具体的原理还没有搞明白,希望高手不吝赐教。


__Test__.java的代码如下:

import java.io.*;
import org.antlr.runtime.*;
import org.antlr.runtime.debug.DebugEventSocketProxy;


public class __Test__ {

    public static void main(String args[]) throws Exception {
        CminusLexer lex = new CminusLexer(new ANTLRFileStream("F:\\antlr\\output\\__Test___input.txt", "UTF8"));
        CommonTokenStream tokens = new CommonTokenStream(lex);

        CminusParser g = new CminusParser(tokens, 49100, null);
        try {
            g.program();
        } catch (RecognitionException e) {
            e.printStackTrace();
        }
    }
}

Test.java的代码如下:

import java.io.*;
import org.antlr.runtime.*;

public class Test {

	public static void main(String[] args) {
        CminusLexer lex = new CminusLexer(new ANTLRStringStream("int a;"));
        CommonTokenStream tokens = new CommonTokenStream(lex);

        CminusParser g = new CminusParser(tokens);
        try {
            g.program();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值