Вопросительный знак в зарезервированном ключевом слове

Я пытаюсь написать парсер для LOLCODE GOD, что я делаю??? (на всякий случай объяснить эти странные слова =))

Итак, мне нужны токены для O RLY? а также YA RLY, Я пытаюсь сделать так:

reserved = { ...,
  'O':    'IF_O',
  'RLY?': 'IF_RLY',
  'YA':   'THEN_YA',
  'RLY':  'THEN_RLY',  ...}
tokens = reserved.values() + (...)

t_IF_O          = r'O'
t_IF_RLY        = r'RLY\?'
t_THEN_YA       = r'YA'
t_THEN_RLY      = r'RLY'

И когда я пишу O RLY? разбирается как IF_O THEN_RLY и неопределенный символ ?,

Если я заменю RLY? с, например, RLYY, заменяя в словаре RLY?: 'IF_RLY' -> 'RLYY': 'IF_RLY' а также t_IF_RLY = r'RLYY'тогда это работает для O RLYY,

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

1 ответ

Извините, но я не могу воспроизвести эту проблему. Вот рабочий пример (ply=3.10, python=3.6):

import ply.lex as lex

tokens = (
    'IF_O',
    'IF_RLY',
    'THEN_YA',
    'THEN_RLY'
)

t_IF_O = r'O'
t_IF_RLY = r'RLY\?'
t_THEN_YA = r'YA'
t_THEN_RLY = r'RLY'

t_ignore = ' \t'


def t_error(t):
    print(t)

lexer = lex.lex()
lexer.input('O RLY?')
while True:
    token = lexer.token()
    if token is None:
        break
    print(token)

И это печатает:

LexToken(IF_O,'O',1,0)
LexToken(IF_RLY,'RLY?',1,2)
Другие вопросы по тегам