Sí, falta el parámetro en los crearLexema.
La implementación que proponés me parece correcta.
Lo de los lexema es solo para abstraernos del procesamiento de strings y poder enfocarnos en las operaciones de Pila. En este ejemplo muy sencillo, en que hay pocos posibles strings y todos de un solo carácter es posible que su manejo no resulte problemático, pero en general sí puede serlo. Aquí, para simplificar asumimos que el string ya fue procesado totalmente y convertido a secuencia de lexemas. En las aplicaciones reales el lexema es usado al obtenerse, no se espera a haber terminado de obtener toda la secuencia. Pero aún esperando a obtener toda la secuencia el string se recorre una vez y la secuencia de lexemas también solo una vez. En cambio la versión en la que no se usa el concepto de pila implica la posibilidad de recorrer el string hacia adelante y hacia atrás varias veces.
La implementación que proponés me parece correcta.
Lo de los lexema es solo para abstraernos del procesamiento de strings y poder enfocarnos en las operaciones de Pila. En este ejemplo muy sencillo, en que hay pocos posibles strings y todos de un solo carácter es posible que su manejo no resulte problemático, pero en general sí puede serlo. Aquí, para simplificar asumimos que el string ya fue procesado totalmente y convertido a secuencia de lexemas. En las aplicaciones reales el lexema es usado al obtenerse, no se espera a haber terminado de obtener toda la secuencia. Pero aún esperando a obtener toda la secuencia el string se recorre una vez y la secuencia de lexemas también solo una vez. En cambio la versión en la que no se usa el concepto de pila implica la posibilidad de recorrer el string hacia adelante y hacia atrás varias veces.