Estoy usando ply como mi analizador de lex. Mis especificaciones son las siguientes:Ply Lex problema de análisis
t_WHILE = r'while'
t_THEN = r'then'
t_ID = r'[a-zA-Z_][a-zA-Z0-9_]*'
t_NUMBER = r'\d+'
t_LESSEQUAL = r'<='
t_ASSIGN = r'='
t_ignore = r' \t'
Cuando trato de analizar la cadena siguiente:
"while n <= 0 then h = 1"
Se da salida siguiente:
LexToken(ID,'while',1,0)
LexToken(ID,'n',1,6)
LexToken(LESSEQUAL,'<=',1,8)
LexToken(NUMBER,'0',1,11)
LexToken(ID,'hen',1,14) ------> PROBLEM!
LexToken(ID,'h',1,18)
LexToken(ASSIGN,'=',1,20)
LexToken(NUMBER,'1',1,22)
No reconoce el token ENTONCES, en cambio, toma "gallina" como identificador.
¿Alguna idea?
Ok, descubrí el problema. – Karan
En realidad, descubrí que debido a t_ignore = r "\ t", estaba ignorando la letra "t" (¡no preguntes mi por qué!). Así que lo eliminé, y ahora comienza a tomar "entonces" como símbolo. – Karan
@Karan: 'r '\ t'' es una cadena * raw *. Supongo que no se pudo escapar el '\ t' y hubiera funcionado si hubieras eliminado la' r' inicial = 't_ignore = '\ t'' – ereOn