Я пытаюсь ANTLR 4.8. У меня проблемы с кодированием правильного основного файла, который вызывает классы lexer и parser.
После правильного анализа моего файла ANTLR g4 (получая все файлы и классы, предоставляемые antlr), я кодировал следующий основной java file:
import java.io.*;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.runtime.*;
import org.antlr.runtime.TokenSource;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
public class example3Ppal {
public static void main(String[] args){
try{
CharStream input = CharStreams.fromFileName(args[0]);
//Create a Lexer with the previously created CharStream
example3Lexer mylexer = new example3Lexer(input);
//Conecting lexer and parser
CommonTokenStream tokens = new CommonTokenStream((TokenSource) mylexer);
example3Parser myparser = new example3Parser((TokenStream) tokens);
myparser.operation();
} catch (java.lang.RuntimeException re) {
System.out.println(re.getMessage());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Я начал с прежнего основного файла, поэтому мне пришлось перейти с ANTLRFileStream и тому подобного на CharStreams. Кажется, все работает, пока я не попытаюсь соединить лексер и парсер. Следуя примерам, представленным на веб-сайте ANTLR, объекта лексера достаточно для создания объекта CommonTokenStream, которого, кроме того, должно быть достаточно для создания объекта синтаксического анализатора.
Ну, во-первых, я сначала попробовал без приведения, но оба - eclipse и NetBeans, попросите меня привести объекты "mylexer" и "tokens". Я не понимаю, почему, потому что суперкласс lexer реализует интерфейс «TokenSource», а «CommonTokenStream» - с интерфейсом «TokenStream». Кроме того, обе среды позволяют мне использовать конструктор CommonTokenStream без каких-либо атрибутов, в то время как этот конструктор не существует в документации ANTLR
Я читал здесь много комментариев о подобных вопросах, но я не нашел ничего, что можно было бы применить к моей ситуации.
В результате он компилируется, но когда я запускаю программу, я получаю следующее сообщение об ошибке: «mylexer не может быть приведен к org.antlr. runtime.TokenSource "
На моем компьютере нет предыдущих установок ANTLR, файл jar" antlr-4.8-complete "правильно включен в качестве внешней библиотеки jar в проектах и также включен в CLASSPATH переменная окружения. Я не знаю, почему то, что должно работать, не работает для меня, кто-то может мне помочь? Я начинаю думать о переустановке java, eclipse, netBeans и ANTLR.
Заранее спасибо.