将ANTLRInputStream转换为CharStream

时间:2018-10-17 05:44:35

标签: java antlr4

我有一个基于antlr4的项目,其中的Main类包含以下代码:

Sheets("sheet1").Select
Range("C1:ADI1").Select
Selection.Copy
Sheets("raportPDF").Select
Range("B6").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
Application.CutCopyMode = False
Selection.UnMerge
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp

但是,由于ANTLRInputStream已被弃用,因此我需要改用CharStream。 但是,当我尝试使用CharStream时,我无法走得更远,

    package com.progur.langtutorial;

import java.io.FileInputStream;
import java.io.IOException;


import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;

public class Main {

    @SuppressWarnings("deprecation")
    public static void main(String[] args) {
        try {
            ANTLRInputStream input = new ANTLRInputStream(
                    new FileInputStream(args[0]));  

            GYOOLexer lexer = new GYOOLexer(input);
            GYOOParser parser = new GYOOParser(new CommonTokenStream(lexer));
            parser.addParseListener(new MyListener());

            // Start parsing
            parser.program(); 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

这是因为我不知道如何替换'='符号后的语句部分。我尝试过CharStream input = new ANTLRInputStream( new FileInputStream(args[0])); ,但是eclipse指出此错误“ CharStreams.fromFileName无法解析为类型”。我也尝试了CharStreams.fromFileName(new FileInputStream(args[0]));,但结果相同。 我什至尝试过CharStreams.fromFileName(args[0]);,其中“ test”是用来测试我编写的语言解析器的程序。也是一样。

我在CharStream input = new CharStreams.fromFileName("test");中也遇到了另一个错误,它说parser.addParseListener(new MyListener());。那是什么意思?在每个教程中,我都看过“ MyListener()”所在的位置有一个随机名称。 正确的说法应该是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

赞:

CharStream charStream = CharStreams.fromString("test");

其中"test"是要解析的输入本身。

或者当输入位于文件中时,执行以下操作:

CharStream charStream = CharStreams.fromFileName("/path/to/file.ext");

如果这不起作用,则需要检查引发的异常(很可能该文件不在ANTLR查找的位置:尝试绝对​​路径)。