ANTRL4 неправильно анализирует - PullRequest
0 голосов
/ 21 марта 2019

При изучении ANTRL4 я пытался проанализировать очень простой шаблон, который может иметь одну или более цифр .

Abc.g4

grammar Abc;

@header {
    package antlr4;
}

fragment DIGIT : [0-9]+;

log : DIGIT;

Основной метод

public class OwnParser extends AbcBaseListener
{


    public static void main(String args[])
    {
        String javaClassContent = "9";
        AbcLexer abcLexer = new AbcLexer(CharStreams.fromString(javaClassContent));

        CommonTokenStream tokens = new CommonTokenStream(abcLexer);
        AbcParser parser = new AbcParser(tokens);

         ParseTree tree = parser.log();

        ParseTreeWalker walker = new ParseTreeWalker();
        OwnParser listener= new OwnParser();

        walker.walk(listener, tree);
    }
}

Но когда я выполняю это, он говорит:

строка 1: 0 ошибка распознавания токена в: '9'

в строке 1: 1 отсутствует цифра в ''

Введено правило: <отсутствует цифра>

Я что-то упустил?

1 Ответ

2 голосов
/ 21 марта 2019

Вы получаете ошибку на входе 9, потому что вы не определили ни одно правило лексера, которое соответствует 9.На самом деле, вы вообще не определили никаких правил лексера.Обратите внимание, что вы определили DIGIT только как фрагмент, а фрагменты не производят токены.

Вы также должны были получить предупреждение "неявное определение токена DIGIT in parser" в вашей грамматике.

Если вы удалите ключевое слово fragment из определения DIGIT, обе эти проблемы исчезнут.

...