ANTLR парсинг больших файлов - PullRequest
0 голосов
/ 23 апреля 2020

Я анализирую C ++ с Python3, используя ANTLR. Для кода из 10-20 строк это занимает около 25 ~ 30 секунд c, тогда как c уже слишком много, но когда я пытаюсь проанализировать файл C ++ с 2k строк кода (одна строка), то это происходит дольше, чем 1 час что слишком много! У меня будет более одного файла такого большого размера, и в ожидании такого длинного анализа мой инструмент станет непригодным для использования!

У меня очень простой c код, как показано ниже, а в посетителе у меня 3 функции посетителя.

    input_stream = FileStream(sys.argv[1])
    cpplex = CPP14Lexer(input_stream)

    commtokstream = CommonTokenStream(cpplex)

    cpparser = CPP14Parser(commtokstream)
    print(" parse errors: {}".format(cpparser._syntaxErrors))

    tree = cpparser.translationunit()

    tv = TREEVisitor()
    tv.visit(tree)

1 час - это нормально для строки кода 2k? Можно ли как-нибудь оптимизировать это?

Это файл грамматики, который я использую https://github.com/antlr/grammars-v4/blob/master/cpp/CPP14.g4

...