保留关键字中的问号

时间:2017-10-24 18:37:23

标签: lex ply

我正在尝试为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 个答案:

答案 0 :(得分:0)

抱歉,我无法重现此问题。这是一个工作样本(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)