La documentación para Parsec.Expr.buildExpressionParser
dice:Parsec.Expr repitió operador de prefijo/Postfix no soportado
prefijo y de sufijo operadores de la misma precedencia sólo pueden ocurrir una vez (es decir --2 no está permitida si - es prefijo negar).
y, de hecho, esto me está mordiendo, ya que el lenguaje que estoy tratando de analizar permite la repetición arbitraria de sus operadores de prefijo y de sufijo (pensar en una expresión de C como **a[1][2]
).
Entonces, ¿por qué Parsec
hace esta restricción, y cómo puedo evitarla?
Creo que puedo mover mis analizadores prefijo/postfijo al analizador term
ya que tienen la precedencia más alta.
es decir
**a + 1
se analiza como
(*(*(a)))+(1)
pero lo que pude haber hecho si quería que va a analizar como
*(*((a)+(1)))
si buildExpressionParser
hizo lo que yo quiero, yo simplemente podría haber reorganizado el orden de los operadores en la tabla.
Nota Ver here una solución mejor
Encontré su respuesta extremadamente útil, pero me encontré con otro problema, detallado [aquí] (http://stackoverflow.com/questions/11174775), y agradecería que pudiera echar un vistazo, en el de casualidad tienes una solución. –
Gracias por la útil respuesta. Estoy teniendo algunas dificultades con una generalización de este problema. Si tiene alguna sugerencia, sería muy bienvenido (vea http://stackoverflow.com/questions/33214163/parsec-expr-repeated-prefix-with-different-priority/33217888#33217888) – BartBog