Antecedentes: Como un proyecto corto durante las vacaciones de invierno, estoy tratando de implementar un lenguaje de programación llamado Ax (diseñado para las calculadoras gráficas) usando Python y PLY. Una breve nota: el lenguaje solo permite variables globales y hace un uso intensivo de los punteros.Implementando goto en un ast
Estoy tratando de implementar goto en este idioma, pero no tengo ni idea de cómo hacerlo.
Mi método general es utilizar primero PLY para analizar el código en un ast, luego recorrerlo ejecutando sobre la marcha.
Por ejemplo, la declaración
If 3
Disp 4
Disp 6
End
... se convertiría en ...
['PROGRAM',
['BLOCK',
['IF',
['CONDITION', 3],
['BLOCK',
['DISP', 4],
['DISP', 6]
]
]
]
]
... que se lo ejecute de forma recursiva (I añaden guiones para facilitar la lectura).
Como ast es un árbol, no estoy seguro de cómo saltar entre diferentes nodos. He considerado tal vez la conversión del árbol a una matriz plana ['IF', ['CONDITION', 3], ['DISP', 4], ['DISP', 6]]
para que pueda usar los índices de la matriz plana para ir a líneas específicas en el código, pero esto parece carecer de cierta elegancia y casi se siente como una dar un paso atrás (aunque podría estar equivocado).
Miré this, pero no pude entender cómo funcionó.
Cualquier ayuda o sugerencia sería apreciada.
"Jump"? ¿Qué crees que quieres decir con "Jump"? ¿Por qué "saltar" entre los nodos? Proporcione un ejemplo específico donde "saltaría" a un nodo arbitrario. Es difícil encontrar una necesidad sensata de un salto en un lenguaje basado en árboles. –
El lenguaje que elijo implementar contiene declaraciones goto. Quería hacer coincidir las especificaciones, por lo que necesito ir a Goto. Hice esto basado en el árbol porque parecía algo sensato hacer en ese momento. Supongo que fue un error: ¿qué otras formas de idiomas hay? – Michael0x2a
AX realmente * requiere * un GOTO? Parece extraño. Hay un número infinito de "formas" de idiomas: procedurales, funcionales, etc., etc. Entre los lenguajes de procedimiento, Python y Java (entre otros) no tienen GOTO. Es algo bastante raro. –