Парсер RPLY возвращает ValueError - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь написать базовый язык программирования.Я использую RPLY для lexing и разбора.Я написал 4 токена, необходимых для присвоения значения переменной:

    self.lexer.add('INT', r'd+')
    self.lexer.add('STRING', r'"[^"]*"')
    self.lexer.add('ASSIGN', r'\=')
    self.lexer.add('IDENT', r'[a-zA-Z_][a-zA-Z\d_]*')

Мой генератор синтаксического анализа принимает эти токены

        self.pg = ParserGenerator(
        # A list of all token names accepted by the parser.
        ['NUMBER', 'PRINT', 'OPEN_PAREN', 'CLOSE_PAREN',
         'SEMI_COLON', 'SUM', 'SUB', 'MUL', 'INT', 'STRING', 'IDENT', 'ASSIGN'],
        precedence=[
            ('left', ['SUM','SUB']),
            ('left', ['STRING', 'IDENT', 'ASSIGN'])
        ]
    )

Вот пример создания переменной

    @self.pg.production('identifier : STRING IDENT ASSIGN expression')
    @self.pg.production('identifier : INT IDENT ASSIGN expression')
    def identifier(p):
        return p

И когда я пытаюсь запустить его, я получаю эту ошибку:

Traceback (most recent call last):


File "main.py", line 21, in <module>
    parser.parse(tokens).eval()
  File "/xxx/xxx/anaconda3/lib/python3.7/site-packages/rply/parser.py", line 60, in parse
    self.error_handler(lookahead)
  File "/home/xxx/xxx/Project/parser.py", line 53, in error_handle
    raise ValueError(token)
ValueError: Token('IDENT', 'string')

Входной файл:

    string oki = "ssds"
    print(oki);

Он анализирует строку в IDENT, где строка должна быть проанализирована в токене STRING.вместо.Приоритет установлен, но, может быть, он его не распознает?

...