ANTLR возвращает пустое дерево и grun говорит, что не может загрузить Python3 в качестве лексера или парсера - PullRequest
0 голосов
/ 14 октября 2018

Я хочу собрать анализатор Python3 с помощью antlr, используя python3.Что я сделал:

  1. Скачанный antlr-4.7.1-complete.jar
  2. sudo pip3 install antlr4-python3-runtime
  3. export CLASSPATH = ".:/usr/local/lib/antlr-4.7.1-complete.jar:$CLASSPATH"
  4. загруженная грамматика из официальных грамматик antlr: https://github.com/antlr/grammars-v4/tree/master/python3-py
  5. Анализатор сборки и лексер:

>alias antlr4='java -Xmx500M -cp "/usr/local/lib/antlr-4.7.1-     complete.jar:$CLASSPATH" org.antlr.v4.Tool'
>alias grun='java org.antlr.v4.gui.TestRig'
>antlr4 -Dlanguage=Python3 Python3.g4 //this generated Python3Lexer and Parser and other files
>grun Python3 file_input --tokens test.py
Can't load Python3 as lexer or parser

Это странно, поскольку эта проблема обычно возникает, когда CLASSPATH установлен неправильно, но это правильно.

6.проверено правило (file_input / single_input)например для строки: import foo / def f (что-нибудь вроде keyword _ smth) Я получил это:

строка 1: 6 посторонних входных данных '' ожидание строки NAME 1:10 несоответствующий ввод ''ожидание {NEWLINE, ';'}

Это также странно, так как я скачал грамматику из репозитория antlr, и она работает для других людей

My main.py пытается получить дерево из тестового файла, но дерево всегда пусто:
def main():
    input = FileStream("test.py")
    lexer = Python3Lexer(input)
    stream = CommonTokenStream(lexer)
    parser = Python3Parser(stream)
    tree = parser.file_input()
    print(tree)  

Итак, проблема в том, что мой парсер и лексер не работают.Я пытался сделать это с моим одноклассником Лексером и Парсером (оба работают на него) для Python3, сгенерированным таким же образом, и он все еще не работал.

...