Я хочу собрать анализатор Python3 с помощью antlr, используя python3.Что я сделал:
- Скачанный antlr-4.7.1-complete.jar
- sudo pip3 install antlr4-python3-runtime
- export CLASSPATH = ".:/usr/local/lib/antlr-4.7.1-complete.jar:$CLASSPATH"
- загруженная грамматика из официальных грамматик antlr: https://github.com/antlr/grammars-v4/tree/master/python3-py
- Анализатор сборки и лексер:
>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, сгенерированным таким же образом, и он все еще не работал.