Parsec.Expr powtórzył operator Prefix / Postfix nieobsługiwany
Dokumentacja dlaParsec.Expr.buildExpressionParser
mówi:
Operatory prefiksu i postfiksu o tym samym priorytecie mogą występować tylko raz (tj. --2 nie jest dozwolone, jeśli - jest prefiksem negate).
i rzeczywiście, to mnie gryzie, ponieważ język, który próbuję przeanalizować, pozwala na dowolne powtórzenie operatorów prefiksu i postfiksu (pomyśl o wyrażeniu C, takim jak**a[1][2]
).
Więc dlaczegoParsec
wprowadzić to ograniczenie i jak mogę to obejść?
Myślę, że mogę przenieść moje parsery prefiksu / postfixa doterm
parser, ponieważ mają najwyższy priorytet.
to znaczy
<code>**a + 1 </code>
jest analizowany jako
<code>(*(*(a)))+(1) </code>
ale co mogłem zrobić, gdybym chciał, aby to analizowało jako
<code>*(*((a)+(1))) </code>
JeślibuildExpressionParser
zrobiłem to, co chciałem, mógłbym po prostu zmienić kolejność operatorów w tabeli.
Uwaga Widziećtutaj dla lepszego rozwiązania