2017-10-24 2 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)