Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP でガチの電卓を作る

memory
PRO
February 03, 2023

PHP でガチの電卓を作る

- Title: How to make a serious calculator with PHP
- Lightning talk in our company

memory
PRO

February 03, 2023
Tweet

More Decks by memory

Other Decks in Programming

Transcript

  1. Ί΋Γʙ
    1)1ͰΨνͷి୎Λ࡞Δ
    גࣜձࣾτϥʔφࣾ಺ษڧձ

    View Slide

  2. Έͳ͞Μ͸1)1Ͱి୎

    ࡞Ζ͏ͱͨ͠ΒͲ͏͠·͔͢ʁ

    View Slide

  3. View Slide

  4. View Slide

  5. ͜Εʹ͸໰୊͕͋Γ·͢

    View Slide


  6. ԋࢉͷ༏ઌ౓ΛܾΊΒΕͳ͍

    View Slide


  7. ΦϖϥϯυΛͭҎ্ड͚औΕͳ͍

    View Slide


  8. ฏํ͕ࠜܭࢉͰ͖ͳ͍

    View Slide


  9. ྦྷ৐͕ܭࢉͰ͖ͳ͍

    View Slide


  10. ֊৐͕ܭࢉͰ͖ͳ͍

    View Slide

  11. ͳͲͳͲσϝϦοτ͕͋Γ·͢

    View Slide

  12. Ψνͷి୎͸͜ΕΒΛܭࢉͰ͖Δ͸ͣͰ͢

    View Slide

  13. ˽



    View Slide

  14. ͜ΕΛϢʔβʔೖྗͰܭࢉ͍ͨ͠

    View Slide

  15. Ͱ͸ɼͲ͏͢Δ͔ʁ

    View Slide

  16. ܭࢉࣜΛந৅ߏจ໦ʹม׵͠·͢

    View Slide

  17. ந৅ߏจ໦͸ɼͲ͏΍Δͷʁ

    View Slide

  18. τʔΫϯʹ෼ׂ͢Δ


    ʢLexerɼࣈ۟ղੳثʣ
    AST Խ


    ʢParserɼߏจղੳثʣ
    ࣮ߦ

    View Slide

  19. -FYFSΛ࡞Δ

    View Slide

  20. ˽



    NUM
    OP
    FN_R
    P_OP
    P_OP
    NUM
    FN_L
    OP
    NUM
    OP
    NUM
    P_CL
    OP
    OP
    NUM
    FN_L
    OP
    NUM
    OP
    NUM
    P_CL
    P_CL
    ͜ͷΑ͏ʹҙຯΛ΋ͬͨ࠷খ୯ҐʢτʔΫϯʣʹϥϕϧ(NUM, OP, FN_R ͳͲ)Λ෇͚ͨΓ͢Δͷ͕
    Lexer ͷ໾ׂͰ͢ʢ౰ࣾͷݕࡧػೳͰ΋࣮૷͞Ε͍ͯ·͢ʣ
    ࠓճͷి୎࣮૷Ͱग़ͯ͘Δͷ͸ NUM, OP, FN_L, FN_R, P_OP, P_CL ͷ 6 छྨ͚ͩʂ
    ͪͳΈʹ PHP ͸ϚχϡΞϧ্ 147 छྨ͋Γ·͢ɻ

    View Slide

  21. τʔΫϯ ໾ׂ
    NUM ਺ࣈ
    OP Operatorɻ+, -, *, /, ** ͳͲΛࢦ͢
    FN_R
    Function Right. ӈଆͷ਺ࣈʹԿ͔͠Βؔ਺Λద༻͢Δ

    ʢฏํࠜɼࡾ֯ؔ਺ͳͲʣ
    FN_L
    Function Left. ࠨଆͷ਺ࣈʹԿ͔͠Βؔ਺Λద༻͢Δ

    ʢ֊৐ه߸ʣ
    P_OP
    Parentheses open. Χοί࢝·ΓΛࢦ͢ɻ

    P_CL ͱಉ͡ݸ਺ͳ͚Ε͹͍͚ͳ͍ɻ
    P_CL
    Parentheses close. Χοίด͡Λࢦ͢

    P_OP ͱಉ͡ݸ਺ͳ͚Ε͹͍͚ͳ͍ɻ

    View Slide

  22. 1BSTFSΛ࡞Δ

    View Slide

  23. ϊʔυʹʹ෼͚͍ͯ͘

    View Slide

  24. OP
    NUM NUM
    OP
    NUM NUM
    OP
    FN_L or FN_R
    FN_L or FN_R
    ඞͣϊʔυͷ࢝·Γ͕ OP τʔΫϯʹͳΔ
    Φϖϥϯυ͸ඞͣରʹͳΔΑ͏ʹ͢Δ
    ʢ࣮ߦॱং͕ෆ໌ʹͳΔͨΊʣ
    ӈΦϖϥϯυ
    ࠨΦϖϥϯυ
    ӈΦϖϥϯυ
    ࠨΦϖϥϯυ
    ࠨΦϖϥϯυ ӈΦϖϥϯυ

    View Slide

  25. ઌ΄Ͳͷࣜʹ౰ͯ͸ΊΔͱʜ

    View Slide

  26. 4 -
    *
    sqrt (√)
    + +
    5
    factorial (!)
    **
    2 8
    4
    factorial (!)
    **
    2 8
    ※ P_OP, P_CL ͸ϊʔυͷ༏ઌ౓Λܾఆ͚ͮΔͨΊ͚ͩͳͷͰɼAST Խ࣌ʹ͸ফ͑·͢

    View Slide

  27. ϥϕϧ໊ʹ௚͢ͱ

    View Slide

  28. NUM OP
    OP
    FN_R
    OP OP
    NUM
    FN_L
    OP
    NUM NUM
    NUM
    FN_L
    OP
    NUM NUM
    ※ P_OP, P_CL ͸ϊʔυͷ༏ઌ౓Λܾఆ͚ͮΔͨΊ͚ͩͳͷͰɼAST Խ࣌ʹ͸ফ͑·͢

    View Slide

  29. -FYFS 1BSTFSΛ࣮૷͠·͢ɻ

    View Slide

  30. IUUQTHJTUHJUIVCDPNNNS
    BBBGFCEGBFGBFFD

    View Slide

  31. ి୎ϥϯλΠϜͷ࣮૷ͷॲཧ
    PHP ϥϯλΠϜͷ৔߹ͷॲཧ

    View Slide

  32. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide