Привет, я хочу сделать java или c # метод, который будет возвращать логическое выражение true или false на основе заданного ввода. Например:
if (входные данные соответствуют грамматике antlr)
вернуть истину;
еще
вернуть ложь;
Так что проблема в том, что я не знаю, как проверить, нет ли у пользователя несоответствия. Я попытался пройти по дереву, но он не дает никакого несоответствия как узел дерева. Вероятно, проблема в том, что AST не показывает несоответствующие токены только в дереве разбора. Может также помочь, если кто-нибудь подскажет, как получить парсет из парсера?
Я сделал файл ANTLR .g, и он хорошо работает, теперь мне нужно сделать следующее: я должен проверить, был ли ввод верным или нет, я сделал это, но он не работает:
public static boolean check() {
String file = "test.txt";
ANTLRReaderStream input;
try{
input = new ANTLRReaderStream(new FileReader(file));
regExLexer lexer = new regExLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
regExParser parser = new regExParser(tokens);
CommonTree root = (CommonTree)parser.goal().getTree();
return true;}
catch{
return false;}
}
Так что я ожидаю, что мой метод вернет true только тогда, когда входная строка верна, и false в противном случае. То, как я это сделал, всегда возвращает true, но когда строка неверна, она печатает
"строка 1: 4 постороннего ввода '+' ожидающий EOF"
в консоли.