Slide 1

Slide 1 text

౻࿘େ໻ !NBLF@OPX@KVTU ౔ !3VCZ,BJHJGPMMPXVQ ਖ਼نදݱվળใࠂ͢Δճ

Slide 2

Slide 2 text

લճͷ͋Β͢͡ IUUQTSVCZLBJHJPSHQSFTFOUBUJPOTNBLFOPXKVTUIUNMEBZ

Slide 3

Slide 3 text

લճͷ͋Β͢͡ ਖ਼نදݱϚονϯάΛΊͬͪΌ଎ͨ͘͠

Slide 4

Slide 4 text

લճͷ͋Β͢͡ ͔͠͠ɺਖ਼نදݱ͕଎͘ͳΔͨΊʹ͸੍͍͔ͭ͘໿͕

Slide 5

Slide 5 text

લճͷ͋Β͢͡ ੍໿ϑϦʔͳੈքΛΊͯ͟͠ ό Ϧ Ξ

Slide 6

Slide 6 text

੍໿#FGPSF w ͜ΕΒͷػೳΛ࢖͏ͱɺਖ਼نදݱϚονϯά͕࠷దԽ͞Εͳ͍ 
 ʮઌಡΈɾޙಡΈʯ(?=foo) (?<=bar)ʮΞτϛοΫάϧʔϓʯ(?>foo) 
 ʮ৚݅෼ذʯ(?()yes|no)ʮඇแؚԋࢉࢠʯ(?~foo) 
 ʮޙํࢀরʯ(foo)\1 ʮ෦෼ࣜͷݺͼग़͠ʯ(?foo)\g w ͦͷଞɺಾͷ੍໿ͨͪ 
 ճ਺ࢦఆͷ܁Γฦ͕͠ωετͰ͖ͳ͍(fo{1,23}){42} 
 ۭจࣈྻʹϚον͢Δ͔΋͠Εͳ͍܁Γฦ͕͠ωετͰ͖ͳ͍

Slide 7

Slide 7 text

w ͜ΕΒͷػೳΛ࢖͏ͱɺਖ਼نදݱϚονϯά͕࠷దԽ͞Εͳ͍ 
 ʮઌಡΈɾޙಡΈʯ(?=foo) (?<=bar)ʮΞτϛοΫάϧʔϓʯ(?>foo) 
 ʮ৚݅෼ذʯ(?()yes|no)ʮඇแؚԋࢉࢠʯ(?~foo) 
 ʮޙํࢀরʯ(foo)\1 ʮ෦෼ࣜͷݺͼग़͠ʯ(?foo)\g w ͦͷଞɺಾͷ੍໿ͨͪ 
 ճ਺ࢦఆͷ܁Γฦ͕͠ωετͰ͖ͳ͍(fo{1,23}){42} 
 ۭจࣈྻʹϚον͢Δ͔΋͠Εͳ͍܁Γฦ͕͠ωετͰ͖ͳ͍ ੍໿"GUFS

Slide 8

Slide 8 text

w ͜ΕΒͷػೳΛ࢖͏ͱɺਖ਼نදݱϚονϯά͕࠷దԽ͞Εͳ͍ 
 ʮઌಡΈɾޙಡΈʯ(?=foo) (?<=bar)ʮΞτϛοΫάϧʔϓʯ(?>foo) 
 ʮ৚݅෼ذʯ(?()yes|no)ʮඇแؚԋࢉࢠʯ(?~foo) 
 ʮޙํࢀরʯ(foo)\1 ʮ෦෼ࣜͷݺͼग़͠ʯ(?foo)\g w ͦͷଞɺಾͷ੍໿ͨͪ 
 ճ਺ࢦఆͷ܁Γฦ͕͠ωετͰ͖ͳ͍(fo{1,23}){42} 
 ۭจࣈྻʹϚον͢Δ͔΋͠Εͳ͍܁Γฦ͕͠ωετͰ͖ͳ͍ ੍໿"GUFS ඍົʁ

Slide 9

Slide 9 text

w ͜ΕΒͷػೳΛ࢖͏ͱɺਖ਼نදݱϚονϯά͕࠷దԽ͞Εͳ͍ 
 ʮઌಡΈɾޙಡΈʯ(?=foo) (?<=bar)ʮΞτϛοΫάϧʔϓʯ(?>foo) 
 ʮ৚݅෼ذʯ(?()yes|no)ʮඇแؚԋࢉࢠʯ(?~foo) 
 ʮޙํࢀরʯ(foo)\1 ʮ෦෼ࣜͷݺͼग़͠ʯ(?foo)\g w ͦͷଞɺಾͷ੍໿ͨͪ 
 ճ਺ࢦఆͷ܁Γฦ͕͠ωετͰ͖ͳ͍(fo{1,23}){42} 
 ۭจࣈྻʹϚον͢Δ͔΋͠Εͳ͍܁Γฦ͕͠ωετͰ͖ͳ͍ ੍໿"GUFS ཧ࿦తʹແཧ ͋·Γ࢖ΘΕͯͳ͍

Slide 10

Slide 10 text

w ͜ΕΒͷػೳΛ࢖͏ͱɺਖ਼نදݱϚονϯά͕࠷దԽ͞Εͳ͍ 
 ʮઌಡΈɾޙಡΈʯ(?=foo) (?<=bar)ʮΞτϛοΫάϧʔϓʯ(?>foo) 
 ʮ৚݅෼ذʯ(?()yes|no)ʮඇแؚԋࢉࢠʯ(?~foo) 
 ʮޙํࢀরʯ(foo)\1 ʮ෦෼ࣜͷݺͼग़͠ʯ(?foo)\g w ͦͷଞɺಾͷ੍໿ͨͪ 
 ճ਺ࢦఆͷ܁Γฦ͕͠ωετͰ͖ͳ͍(fo{1,23}){42} 
 ۭจࣈྻʹϚον͢Δ͔΋͠Εͳ͍܁Γฦ͕͠ωετͰ͖ͳ͍ ੍໿"GUFS ཧ࿦తʹແཧ ͋·Γ࢖ΘΕͯͳ͍ ͦΜͳʹ ѱ͘ͳ͍ʁ

Slide 11

Slide 11 text

͜Ε·ͰͷϝϞԽ w ී௨ͷਖ਼نදݱͷ৔߹ɺ 
 ʮ͋Δঢ়ଶʹ͋ΔҐஔ͔ΒͷϚονͰࣦഊͨ͠ʯͱ͍͏৘ใΛه࿥͢Ε͹0, w ϝϞԽςʔϒϧͷܕ 
 memo: (State, Int) -> (NoMemo | Failure) w ઌಡΈɾޙಡΈ͕͋Δ৔߹ɺΞτϛοΫάϧʔϓ͕͋Δ৔߹͸ʁ

Slide 12

Slide 12 text

ઌಡΈɾޙಡΈͷϝϞԽ w ઌಡΈɾޙಡΈ෦෼͸Ϛονϯάࣦഊ͍ͯ͠ͳͯ͘΋ɺ 
 ʮ͋Δঢ়ଶɾ͋ΔҐஔʯʹ΋͏Ұ౓౸ୡ͢ΔՄೳੑ͕͋Δ 
 ྫ/a*?(?=a*)z/ w ʮઌಡΈɾޙಡΈ෦෼ͷϚονϯάʹ੒ޭͨ͠ʯͱ͍͏৘ใΛ 
 ϝϞԽςʔϒϧʹه࿥͢Δඞཁ͕͋Δ w ϝϞԽςʔϒϧͷܕ 
 memo: (State, Int) -> (NoMemo | Success | Failure)

Slide 13

Slide 13 text

ΞτϛοΫά ϧʔϓͷϝϞԽ w ΞτϛοΫά ϧʔϓͷ৔߹ɺ 
 ΞτϛοΫά ϧʔϓͷதͰͷࣦഊͱɺ֎ଆͰͷࣦഊΛ۠ผ͠ͳ͚Ε͹͍͚ͳ͍ ֎ଆͰࣦഊͨ͠৔߹ɺΞτϛοΫά ϧʔϓͷதͷόοΫτϥοΫ͸ 
 লུ͠ͳ͚Ε͹͍͚ͳ͍ w ϝϞԽςʔϒϧͷܕ 
 memo: (State, Int) -> 
 (NoMemo | Success | AtomicFailure | Failure)

Slide 14

Slide 14 text

࣮૷ͷमਖ਼఺ w ࣮ࡍͷϝϞԽςʔϒϧ͸CJU഑ྻͳͷͰɺ 
 ઌಡΈɾޙಡΈɾΞτϛοΫά ϧʔϓ಺ͷঢ়ଶʹରͯ͠͸ 
 CJU࢖ͬͯϝϞԽ͢ΔΑ͏ʹͨ͠ w ͜Ε·Ͱ͸ʮ͋Δঢ়ଶʹ͋ΔҐஔͰ౸ୡͨ͠ʯͱ͍͏৘ใΛه࿥͍͕ͯͨ͠ɺ 
 ʮ͋Δঢ়ଶʹ͋ΔҐஔ͔ΒͷϚονʹࣦഊͨ͠ʯͱ͍͏৘ใʹ͢ΔͨΊɺ 
 όοΫτϥοΫதʹϝϞԽςʔϒϧΛߋ৽͢ΔΑ͏ʹͨ͠ IUUQTHJUIVCDPNSVCZSVCZQVMM

Slide 15

Slide 15 text

ݱࡏͷ੍໿ w ͜ΕΒͷػೳΛ࢖͏ͱɺਖ਼نදݱϚονϯά͕࠷దԽ͞Εͳ͍ 
 ʮ৚݅෼ذʯ(?()yes|no)ʮඇแؚԋࢉࢠʯ(?~foo) 
 ʮޙํࢀরʯ(foo)\1 ʮ෦෼ࣜͷݺͼग़͠ʯ(?foo)\g w ͦͷଞɺಾͷ੍໿ͨͪ 
 ճ਺ࢦఆͷ܁Γฦ͕͠ωετͰ͖ͳ͍(fo{1,23}){42} 
 ઌಡΈɾޙಡΈͱΞτϛοΫά ϧʔϓ͕ωετͰ͖ͳ͍ 
 ઌಡΈɾޙಡΈɾΞτϛοΫά ϧʔϓͷதͰΩϟϓνϟ͸࢖͑ͳ͍

Slide 16

Slide 16 text

ΏΔ΅ w ੍໿ʹ͔͔Βͳ͍͔Ͳ͏͔ΛRegexp.linear_time?ͰνΣοΫͰ͖·͢ w ͜ΕΛ࢖ͬͯɺϓϩάϥϜதͷਖ਼نදݱ੍͕໿ʹ͔͔Βͳ͍͔νΣοΫ͢Δ 
 3VCPDPQϓϥάΠϯΛ࡞ͬͯɺϝϯςφϯεͯ͘͠ΕΔਓΛืू͍ͯ͠·͢ SVCZKQ4MBDLͷSFHFYQνϟϯωϧʹͯ