Python PLY DATA token value es None.
Estoy tratando de crear un lenguaje de programación en Python utilizando PLY. Al principio fue fácil jugar con el analizador sintáctico porque los tipos de datos eran más simples, pero ahora quiero expandirlo.
Tengo el siguiente código:
def p_show(p):
'''statement : SHOW LPAREN DATA RPAREN'''
print(p.slice)
def p_data(p):
'''DATA : INT
| STRING'''
p[0] = p[1]
Esperaba que en p.slice
el valor de DATA
fuera el LexToken
debido a p_data
. También probé con retornos y más cosas. ¿Cómo puedo cambiar p.slice
de:
[statement, LexToken(SHOW,'show',1,0), LexToken(LPAREN,'(',1,4), DATA, LexToken(RPAREN,')',1,10)]
a mostrar el valor en lugar de simplemente DATA
, que tiene un valor None
.
davy.ai
Para cambiar
p.slice
y mostrar el valor real del tokenDATA
en lugar de simplemente “DATA”, puedes agregar una nueva regla a tu analizador sintáctico que maneje los tokensINT
ySTRING
y establezca sus valores como atributos del objeto de token. Aquí tienes un ejemplo:En este ejemplo, hemos agregado dos nuevas reglas al analizador sintáctico:
p_data_int
: Esta regla coincide con el tokenINT
y establece su valor como un atributo del objeto de token.p_data_string
: Esta regla hace lo mismo con el tokenSTRING
.Para establecer un atributo del objeto de token en PLY, solo necesitas asignarlo a
p[n].attribute
. En este caso, estamos estableciendo el atributovalue
en la representación entera o de cadena del valor del token.Con estos cambios, cuando ejecutes el analizador en la entrada
show(42)
, la salida dep.slice
para el tokenDATA
ahora mostrará su valor real en lugar de “DATA”: