Вопросительный знак в зарезервированном ключевом слове
Я пытаюсь написать парсер для 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)