Infix to RPN
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Infix to RPN



  1. #1
    Médiat

    Infix to RPN


    ------

    Bonjour,

    Dans le cadre d'un développement (rien de commercial) j'ai eu à écrire un convertisseur infix ==> postfix (ou RPN) pour des expressions mathématiques contenant des fonctions.

    J'aimerais tester cette partie facilement j'ai donc cherché sur le net des convertisseurs online, mais les seuls que j'ai trouvé ne gère que les 4 opérations (et souvent même pas les - et + unaire).

    Si vous connaissez un tel outil online je serais très intéressé, merci d'avance

    -----
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

  2. #2
    pm42

    Re : Infix to RPN

    Tu as ça qui convertit du python en RPN :

    https://www.pyrpn.atug.com

    Ecrire des fonctions en python est trivial et bien documenté si tu n'a jamais fait.

    L'auteur a expliqué sa démarche ici : https://www.hpmuseum.org/forum/threa...ghlight=python

  3. #3
    Médiat

    Re : Infix to RPN

    Salut,

    Avant tout, merci, je vais jeter un oeil
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

  4. #4
    Médiat

    Re : Infix to RPN

    Malheureusement, cela ne marche pas comme je l'attends pour l'exponentiation, et en tout état de cause mes formules sont trop compliquées

    Potential RPN stack overflow detected - expression too complex for 4 level stack - simplify! [3, 5, 5, 12, 'x'], line: 3
    3+5*(5-12*x) + SIN(4**2.125)
    Alors que cette formule est très simple pour ce que je veux faire

    Merci quand même
    Dernière modification par Médiat ; 03/07/2020 à 14h46.
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : Infix to RPN

    Citation Envoyé par Médiat Voir le message
    Malheureusement, cela ne marche pas
    Dommage et étonnant parce que ta formule se calcule en RPN facilement en consommant 2 niveaux de pile. Il ne doit pas transformer son arbre d'analyse de façon optimale afin d'utiliser le moins d'emplacements possible.

    Une autre solution mais qui s'éloigne de ta demande est d'écrire cela en Java/Kotlin ou tout langage qui cible la JVM et de décompiler ensuite. La machine virtuelle est une machine à pile sans limite de profondeur.
    Mais c'est un poil plus lourd et le code généré est moins immédiatement lisible que du RPN HP.

  7. #6
    Médiat

    Re : Infix to RPN

    D'autant plus que mon seul but est de tester mon code, donc je cherche un outil simple et fiable (si possible online)
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

  8. #7
    jacknicklaus

    Re : Infix to RPN

    Dans le cadre d'un projet personnel, j'ai eu à écrire un compilateur, et j'avais choisi de traiter les expressions en RPN. Par exemple ta phrase

    a = 3+5*(5-12*x) + SIN(4^2.125)

    donne, si on demande l'affichage du byte-code : (affichage compliqué, à l'origine pour d'autres usages, mais ne retenir que le dernier membre dans chaque paire d'accolade)

    {advc,7;advc a} {cte,8;cte 3}{cte,9;cte 5} {cte,10;cte 5} {cte,11;cte 12} {arvc,12;arvc x}
    {oper,13;oper *} {oper,14;oper -} {oper,15;oper *} {oper,16;oper +} {cte,17;cte 4}
    {ctec,18;ctec 2.125000} {oper,19;oper ^} {dpsw,20;dpsw SIN} {oper,21;oper +} {oper,22;oper =}

    c'est à dire : a 3 5 5 12 x * - * + 4 2.125 ^ + =

    si ceci t'intéresse, MP et je te communique comment accéder au programme.
    There are more things in heaven and earth, Horatio, Than are dreamt of in your philosophy.

  9. #8
    Médiat

    Re : Infix to RPN

    Bonsoir

    Citation Envoyé par jacknicklaus Voir le message

    c'est à dire : a 3 5 5 12 x * - * + 4 2.125 ^ + =
    C'est exactement ce que j'attends

    si ceci t'intéresse, MP et je te communique comment accéder au programme.
    Oui, je veux bien. Merci
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse