2017-10-24 1 views
0

LOLCODE のパーサーを作成しようとしていますが、私は何をしていますか? (念のため、これらの奇妙な言葉を=説明すると))予約済みのキーワードの疑問符

だから、私は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

申し訳ありませんが、この問題は再現できません。ここでは、作業サンプルがある(プライ= 3.10、パイソン= 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)