我正在尝试为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
。
所以我认为这是保留字中的问号问题,并且不知道解决方法。
答案 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)