ANTLR Ошибка синтаксического анализатора Python - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь прочитать грамматику antlr с помощью python.

Как и в этом вопросе:

Умлауты в файлах JSON приводят к ошибкам в коде Python, созданном ANTLR4

возникает ошибка:

File "/usr/local/lib/python2.7/dist-packages/antlr4/Lexer.py", line 109,     
  in nextToken
    tokenStartMarker = self._input.mark()
AttributeError: 'str' object has no attribute 'mark'

.

Моя грамматика отлично работает с Java и не имеет немецких умлаутов.

Код генерируется так:

antlr4 -Dlanguage=Python2 -visitor MyGrammar.g4

Может ли ошибка иметь другую причину?Может быть, проблемы с версией или что-то еще?

1 Ответ

0 голосов
/ 17 декабря 2018

Причиной возникновения этой проблемы является то, что вы не использовали antlr4.InputStream Функция mark является частью класса InputStream

https://github.com/antlr/antlr4/blob/master/runtime/Python2/src/antlr4/InputStream.py

Следующий код работает

ГРАММАРНЫЙ ФАЙЛ

    grammar someGrammar;

    operation  : NUMBER '+' NUMBER ;

    NUMBER     : [0-9]+ ;

    WHITESPACE : ' ' -> skip ;

КОД ПИТОНА

    import antlr4
    from antlr4 import *
    from psqlListener import psqlListener
    from psqlLexer import psqlLexer
    from psqlParser import psqlParser
    import sys
    inputStream = antlr4.InputStream('4+5');
    lexer = psqlLexer(inputStream)
    stream = CommonTokenStream(lexer)
    parser = psqlParser(stream)
...