• 検索結果がありません。

PEGマシンのFPGA実装について

N/A
N/A
Protected

Academic year: 2021

シェア "PEGマシンのFPGA実装について"

Copied!
6
0
0

読み込み中.... (全文を見る)

全文

(1)Vol.2016-ARC-221 No.6 2016/8/8. ৘ใॲཧֶձ‫ڀݚ‬ใࠂ IPSJ SIG Technical Report. PEG Ϛγϯͷ FPGA ࣮૷ʹ͍ͭͯ ϚΠ ϚΠΫΦϯ1. ຊଟ फ़1. ૔ޫ ‫܅‬࿠1. ֓ཁɿղੳද‫ݱ‬จ๏ (PEG) ͸ɺ2004 ೥ʹ Ford ʹΑͬͯఏҊ͞Εͨ‫ࣜܗ‬จ๏Ͱ͋Γɺਖ਼‫ن‬ද‫ݱ‬΍จ຺ࣗ ༝จ๏ͷ୅ସͱͯ͠ਓ‫͍ͯͬ·ߴ͕ؾ‬ΔɻຊߘͰ͸ɺΑΓߴ͍ੑೳཁ‫ٻ‬Λ໨ࢦͨ͢ΊɺPEG ͷ FPGA ࣮ ૷ɺಛʹ PEG ԋࢉࢠͷ໋ྩԽʹΑΔόʔνϟϧϚγϯํࣜʹ͍ͭͯใࠂ͠ɺੑೳʹؔ͢Δॳ‫ظ‬Ϩϙʔτ Λߦ͏༧ఆͰ͋Δɻ ΩʔϫʔυɿPEG, FPGA, Ծ૝Ϛγϯ. FPGA Implementation of PEG Machine Mai Maicuong1. Honda Shun1. Kuramitsu Kimio1. Abstract: Parsing Expression Grammar (PEG) is recognition-based foundation for describing syntax, formalized by Ford in 2004. PEG’s powerful expressiveness is popular as the alternation of Regular Expression or Context-free Grammar. In this paper, we report about FPGA implementation of PEG, espeacially virtual machine method with making instruction of PEG operator to aim at higher performance, and make the initial report of the performance. Keywords: PEG, FPGA, Virtual Machine. 1. ͸͡Ίʹ ۙ೥ɺΫϥ΢υͳͲͷσʔληϯλʔͰ࢖͏ίϯϐϡʔ. ஌͢ΔɻͦΕΒͷύλʔϯ͸ਖ਼‫ن‬ද‫هͰݱ‬ड़͞ΕΔ͜ͱ͕ ଟ͍ɻ. FPGA ্Ͱਖ਼‫ن‬ද‫ݱ‬Λ༻͍ͨϚονϯάϚγϯʹؔ͢. ςΟϯάσόΠεͱͯ͠ੑೳ޲্΍ిྗ࡟‫ݮ‬ͷ‫ظ‬଴͔Βɺ. Δ‫ڀݚ‬͸༷ʑ͋Γ [3], [4], [7], [8]ɺFPGA Λ༻͍Δ͜ͱʹ. FPGA ͕஫໨͞Ε͍ͯΔɻྫ͑͹ɺMicrosoft ͕ࣾ Web Τ. Αͬͯॲཧ࣌ؒΛେ෯ʹ୹ॖ͢Δ͜ͱ͕Ͱ͖Δɻ͔͠͠ɺ. ϯδϯʮBingʯͷॲཧΛߴ଎Խ͢ΔͨΊʹɺࣗࣾͷσʔλ. ύλʔϯͷෳࡶ౓ʹै͍ɺύλʔϯϚονϯάճ࿏͕ඇৗ. ηϯλʔ FPGA Λಋೖ͢Δͱൃදͨ͠ɻ·ͨɺதࠃͷωο. ʹେ͖͘ͳΔͷ͸໰୊Ͱ͋Δɻ. τ‫ࡧݕ‬αʔϏεେखͷ Baidu ࣾ΋ը૾‫ࡧݕ‬αʔϏεͷ࣮. ຊ‫Ͱڀݚ‬͸ɺίϯύΫτɺ͔ͭޮ཰͕Α͍ϚονϯάϚγ. ૷ʹ FPGA ͷಋೖΛ‫ݕ‬౼͍ͯ͠ΔɻIntel ࣾͰ΋αʔόʔ. ϯΛ࣮‫͢ݱ‬Δ͜ͱΛ໨తͱ͍ͯ͠ΔɻͦͷͨΊɺҰൠతʹ. CPUʮXeonʯͷύοέʔδʹ FPGA ΛऩΊΔ੡඼Λ౤ೖ. ࢖ΘΕ͍ͯΔਖ਼‫ن‬ද‫ݱ‬ͷ୅ΘΓʹɺղੳද‫ݱ‬จ๏ʢParsing. ͢Δ༧ఆͰ͋Δɻ. Expression Grammarʣ[1] Λ༻͍ΔɻPEG ͸ Ford ʹΑͬ. ҰํɺσʔληϯλʔͰ͸ɺ΢ΠϧεରࡦͳͲͷηΩϡ. ͯఏҊ͞Εɺਖ਼‫ن‬ද‫ݱ‬΍จ຺ࣗ༝จ๏ͷ୅ସͱͯ͠ਓ‫͕ؾ‬. ϦςΟରࡦ͕ෆՄܽͰ͋ΔɻͦͷରࡦͷҰͭͱͯ͠ɺ৵ೖ. ߴ·͍ͬͯΔɻPEG ͷಛ௃ͱͯ͠ɺᐆດੑ͕ͳ͘ɺࣈ۟ղ. ‫ݕ‬஌γεςϜʢIDSɿInstruction Detection System) ͕͋. ੳ͕ෆཁͰ͋Γɺ·ͨ࠶‫ؼ‬తͳߏ଄ͷॲཧʹ޲͍͍ͯΔɻ. ΔɻIDS Ͱ͸ɺൺֱతॲཧͷ͍ܰϗετ‫ ܕ‬IDS ͕޿͘࢖Θ. ຊ‫Ͱڀݚ‬͸ɺFPGA ্Ͱ PEG ʹಛԽͨ͠όʔνϟϧϚγ. Ε͍ͯΔɻϗετ‫ ܕ‬IDS ͸‫ط‬ଘͷෆਖ਼ΞΫηεύλʔϯ. ϯΛ࣮‫͢ݱ‬Δɻඞཁ࠷খ‫ݶ‬ͷճ࿏Λ౥ࡌ͠ɺ·ͨ PEG ԋ. Λ‫ه‬Ա͠ɺύλʔϯϚονϯάʹΑΓɺෆਖ਼ΞΫηεΛ‫ݕ‬. ࢉࢠʹಛԽͨ͠ઐ༻ճ࿏ʹΑͬͯίϯύΫτ͔ͭޮ཰͕Α. 1. ͍ϚονϯάϚγϯ͕‫ظ‬଴Ͱ͖Δɻ. ԣ඿ࠃཱେֶ. ⓒ 2016 Information Processing Society of Japan. 1.

(2) Vol.2016-ARC-221 No.6 2016/8/8. ৘ใॲཧֶձ‫ڀݚ‬ใࠂ IPSJ SIG Technical Report. ຊߘͷߏ੒͸࣍ͷ௨ΓͰ͋Δɻୈ 2 અ͸ PEG ʹ͍ͭͯ ड़΂Δɻ࣍ʹୈ 3 અɺୈ 4 અͰ͸ɺઃ‫͍ͯͭʹ૷࣮ͼٴܭ‬ આ໌͢Δɻୈ 5 અͰ͸ੑೳධՁΛߦ͍ɺ࠷‫ʹޙ‬ୈ 6 અʹ݁. 3. ઃ‫ܭ‬ PEG ͸ packrat parsing[12][2][6] ʹΑΓઢ‫Ͱؒ࣌ܗ‬ղੳ ͢Δ͜ͱ͕Ͱ͖Δɻ͔͠͠ɺpackrat parsing ͸େ͖ͳೖྗ. ࿦ͱࠓ‫ޙ‬ͷ՝୊Λड़΂Δɻ. ʹରͯ͠ലେͳϝϞϦ༰ྔΛ࢖༻͢ΔɻͦͷͨΊɺେ͖ͳ ೖྗΛडཧ͢ΔͨΊɺMedeiros ࢯ͕ PEG ͷͨΊͷ Virtual. 2. ղੳද‫ݱ‬จ๏. Parsing Machine[5] ΛఏҊͨ͠ɻຊ‫͍༻Ͱڀݚ‬Δόʔνϟ. PEG ͸ A ← e ͱ͍͏ϧʔϧͷू߹Ͱ͋Γɺͦͷதʹ A ͸ඇऴ୺‫߸ه‬ɺe ͸ղੳද‫͋Ͱݱ‬Δɻղੳද‫ݱ‬͸ද 1 ʹ. ϧϚγϯ͸ Medeiros ࢯ͕ఏҊͨ͠όʔνϟϧϚγϯΛϕʔ εʹ͍ͯ͠Δɻ໋ྩηοτ͸ਤ 2 ͱͳΔɻ. Αͬͯද͞ΕΔɻ. ද 1 PEG ͷԋࢉࢠ ղੳද‫ݱ‬. ҙຯ. ‘hoge’. จࣈϦςϥϧ. [a-zA-Z0-9]. จࣈΫϥε. .. ೚ҙͷจࣈ. A. ඇऴ୺‫߸ه‬. (e). άϧʔϐϯά. e?. Φϓγϣϯ. e*. 0 ‫ݸ‬Ҏ্ͷ‫܁‬Γฦ͠. e+. 1 ճҎ্ͷ‫܁‬Γฦ͠. &e. ߠఆઌಡΈɹ. !e. ൱ఆઌಡΈ. ຊ‫͍༻Ͱڀݚ‬Δ໋ྩηοτ͸ Medeios ࢯͷఏҊ໋ͨ͠. e1 e2. γʔέϯε. ྩηοτʹɺPEG ͷԋࢉࢠΛ࣮ߦ͢ΔͨΊͷಛԽ໋ྩΛ. e1 /e2. ༏ઌ౓෇͖બ୒. ௥Ճ͍ͯ͠ΔɻಛԽ໋ྩͰ͸ɺΦϓγϣϯ໋ྩʢObyte,. ਤ 2 ໋ྩηοτ. Oset)ɺ0 ‫ݸ‬Ҏ্ͷ‫܁‬Γฦ໋͠ྩ (Rbyte, Rsetʣ‫ͼٴ‬ઌಡΈ ໋ྩ (Nbyte, Nset, Nany) ͕͋Δɻ͜ΕΒͷ໋ྩ͸ɺ࣮ߦ. ‘abc’ ‫ · ͼٴ‬͸ͦΕͧΕ abc ͱ೚ҙͷจࣈʹϚον͢Δɻ [abc] ͷ৔߹ɺabc ͷ͍ͣΕ͔ 1 จࣈʹϚον͢Δɻe?, e*, e+͸ਖ਼‫ن‬ද‫ͱݱ‬ಉ༷Ͱ͋Δ͕ɺPEG Ͱ͸Ͱ͖Δ͚ͩ௕. ͢Δ໋ྩ਺Λ࡟‫͠ݮ‬ɺ·ͨಛԽճ࿏ʹΑͬͯɺ࣮ߦޮ཰Λ ্͛ΔͨΊʹ͋Δɻ ϝϞϦ࢖༻ྔΛ࡟‫͢ݮ‬ΔͨΊɺ໋ྩͷϫʔυ͸ 16bit ʹ. ͍จࣈྻΛϚονͤ͞Δɻe1 e2 ͸ॱ࣍ʹ e1 ɺe2 ΛධՁ͠ɺ. ऩΊͨɻୈ 15 Ϗοτ͔Βୈ 11 Ϗοτ·Ͱ͸ɺΦϖϨʔ. ͲͪΒ͔͕ࣦഊͨ͠৔߹ɺ࠷ॳͷҐஔʹόοΫτϥοΫ͢. γϣϯϑΟʔϧυʢOp ϑΟʔϧυʣͰ͋Γɺ໋֤ྩʹରԠ. Δɻ༏ઌ෇͖બ୒ (e1 /e2 ) ͸·ͣ e1 ΛධՁ͠ɺ΋ࣦ͠ഊ͠. ͨ͠ίʔυׂ͕ΓৼΒΕΔɻୈ 10 Ϗοτ͔Βୈ 0 Ϗοτ. ͨ৔߹ e2 ΛධՁ͢Δɻ·ͨɺ!e Ͱ͸ e ͕ࣦഊ͢Δ࣌ʹ੒. ·Ͱ͸໋ྩͷର৅σʔλͱͳΓɺ໋ྩʹΑͬͯ͜ͷσʔλ. ޭ͠ɺe ͕੒ޭͨ࣌͠ʹࣦഊ͢Δɻ. ͷҙຯ͕ҟͳΔɻର৅σʔλͷҙຯ͸ද 2 ʹࣔ͢ͱ͓ΓͰ. ਤ 1 ͸࢛ଇԋࢉΛද͢ PEG ͷྫͰ͋ΔɻPEG ͷԋࢉࢠ ͸ඇৗʹ୯७Ͱɺ࠶‫ؼ‬తߏ଄Λॲཧ͢Δͷʹ༏Ε͍ͯΔɻ. ͋Δɻ໋ྩͷόΠτίʔυͷੜ੒͸ߏจղੳϓϥοτϗʔ Ϝ Nez[10] Λ࢖༻͍ͯ͠Δɻ. ·ͨɺࣈ۟ղੳ‫ߏͼٴ‬จղੳΛ෼͚Δඞཁ͕͋Δଞͷ‫ࣜܗ‬. ද 2 ର৅σʔλͷҙຯ. จ๏ͱҧͬͯɺPEG Ͱ͸ɺࣈ۟ղੳΛಉ࣌ʹߦ͏͜ͱ͕Ͱ ͖Δɻ. ໋ྩ. Byte/Obyte/Rbyte/Nbyte Set/Oset/Rset/Nset Call/Alt/Jump. ର৅σʔλͷҙຯ จࣈ. Set ςʔϒϧͷΠϯσοΫε ໋ྩΞυϨε. 4. ࣮૷ ਤ 1 PEG ྫ. 4.1 શମਤ શମͷγεςϜ͸ਤ 3 ʹࣔ͢ͱ͓ΓͰ͋Δɻϗετͱͷ ௨৴͸ Ubuntu OS ͱ FPGA ͷ௨৴͕Մೳʹͨ͠ɺXillybus. ⓒ 2016 Information Processing Society of Japan. 2.

(3) Vol.2016-ARC-221 No.6 2016/8/8. ৘ใॲཧֶձ‫ڀݚ‬ใࠂ IPSJ SIG Technical Report. ͕ࣾఏ‫͍ͯ͠ڙ‬Δ Xillybus IP ίΞΛ༻͍Δɻ·ͨɺϝΠ. 4.2 PEGVM ͷಈ࡞. ϯϝϞϦ͸ FPGA ʹ౥ࡌ͍ͯ͠ΔϒϩοΫϝϞϦͰ࣮૷. PEGVM ͷಈ࡞͸ɺ໋ྩϑΣονɺจࣈσʔλಡΈࠐ. ͢ΔɻγεςϜͷಈ࡞Ͱ͸ɺ·ͣϗετ͔Β໋ྩྻͷόΠ. Έɺ໋ྩσίʔυɺ‫ͼٴ‬ԋࢉɾσʔλసૹΛߦ͏໋ྩ࣮ߦ. τίʔυΛड͚औΓɺϝϞϦʹҰ࣌తʹอଘ͢Δɻ࣍ʹจ. ͱ͍ͬͨҰ࿈ͷॲཧͷ‫܁‬Γฦ͠Ͱ͋ΓɺͦΕΒʹରԠͨ͠. ࣈྻΛϗετ͔Βड͚औΓɺղੳΛߦ͍ɺ݁ՌΛϗετʹ. FɺDɺE ͱ͍͏̏ͭͷঢ়ଶ͕͋ΔɻҰൠతʹɺ໋ྩϑΣο. ฦ͢ɻ. ν͸໋ྩ͕֨ೲ͞Ε͍ͯΔϝϞϦΞυϨεͷઃఆɺϝϞϦ σʔλϨδελ΁ͷಡΈࠐΈɺ໋ྩϨδελ΁ͷసૹͷ̏ ͭͷಈ࡞Ͱߏ੒͞ΕΔɻ͔͠͠ɺຊ࣮૷Ͱ͸ FPGA ʹ౥ ࡌ͍ͯ͠Δ BlockRAM ΛϝϞϦͱͯ͠࢖༻͢ΔͨΊɺ໋ ྩϑΣον͸ 1 ΫϩοΫαΠΫϧͰ࣮ߦͨ͠ɻ࣮ࡍʹɺϝ ϞϦΞυϨε͸ࣄલʹઃఆ͓͖ͯ͠ɺಡΈग़͠৴߸͕͋Δ ৔߹ɺσʔλΛϝϞϦσʔλϨδελΛ௨ͣ͞ɺ௚઀໋ྩ Ϩδελʹసૹ͞ΕΔɻD ঢ়ଶ΋ 1 ΫϩοΫαΠΫϧͰ࣮ ߦ͞ΕΔɻE ঢ়ଶ͸‫ج‬ຊతʹ 1 ΫϩοΫαΠΫϧͰ࣮ߦ͞ ΕΔ͕ɺRbyteɺRset ΍෼‫ྩ໋ذ‬ͷ৔߹͸ྫ֎Ͱ͋Γɺ۩ ମతʹ͸ 4.3 અͰઆ໌͢Δɻ ੍‫ޚ‬৴߸ੜ੒ճ࿏ͷ໾ׂ͸ɺ੍‫ޚ‬৴߸Λద࣌ੜ੒ͯ͠ɺ ਤ 3 શମγεςϜ. ֤ճ࿏ʹ఻͑Δ͜ͱͰ͋Δɻঢ়ଶ FɺDɺE ʹରͯ͠ɺ3 ͭ ͷϑϦοϓϑϩοϓ͕௚ྻʹ઀ଓ͞Ε͍ͯΔɻ·ͣલͷ໋. ·ͨɺPEG ʹಛԽͨ͠ Virtual Machine(PEGVM) ͷશ ମਤ͸ਤ 4 ͱͳΔɻPEGVM ʹ͸ɺॻ͖‫ػ͑׵‬ೳ͖ͭϓϩ άϥϜϨδελʢPR) ͕͋ΔɻPR ͸࣍ʹ࣮ߦ͢΂໋͖ྩ ͕֨ೲ͞ΕͨϝϞϦΞυϨεΛࢦఆ͢ΔɻϓϩάϜͷ࣮ߦ ʹैͬͯॱ࣍ʹΠϯΫϦϝϯτ͞Εɺͨͩ͠ɺ෼‫ྩ໋ذ‬΍ ׂΓࠐΈ͕࣮ߦ͞Εͨ৔߹ɺ෼‫ذ‬ઌͷΞυϨε͕ PR ʹॻ ͖ࠐ·ΕΔɻ·ͨɺReturn ελοΫͱ Fail ελοΫ͕͋ ΓɺͦΕͧΕͷελοΫ͕ελοΫϙΠϯλΛ͍࣋ͬͯΔɻ ελοΫϙΠϯλ͸ɺΠϯΫϦϝϯλͱσΟΫϦϝϯλΛ. ྩͷ࣮ߦ͕੒ޭͨ͠৔߹ɺঢ়ଶ F ʹର͢ΔϑϦοϓϑϩο ϓʹϑΣον‫ى‬ಈ৴߸ͷϋΠϨϕϧ஋͕औΓࠐ·ΕΔɻͦ ͷΫϩοΫͷؒɺϝϞϦ΁ͷಡΈग़͠৴߸ΛϋΠϨϕϧʹ ͢Δɻͦͷ࣍ͷΫϩοΫͷ্ཱ͕ͪΓͰɺঢ়ଶ D ʹର͢Δ ϑϦοϓϑϩοϓʹϋΠϨϕϧ஋͕औΓࠐ·Εɺঢ়ଶ F ʹ ର͢ΔϑϦοϓϑϩοϓͷग़ྗ஋͸ϩʔϨϕϧʹͳΔɻͦ ͷΫϩοΫͷؒɺIR ͕͍࣋ͬͯΔ໋ྩσʔλ͕σίʔυ͞ ΕΔɻಉ༷ʹͯ͠ɺͦͷ࣍ͷΫϩοΫαΠΫϧͰ͸ɺ໋ྩ ࣮ߦͷͨΊͷ৴߸ΛϋΠϨϕϧʹͯ͠ɺ໋ྩΛ࣮ߦ͢Δɻ ͦͯ͠ɺ࣍ͷΫϩοΫ͔Β৽ͨͳ໋ྩϑΣονΛ࣮ߦ͢Δɻ. ͓࣋ͬͯΓɺ৴߸ʹΑͬͯΠϯΫϦϝϯτ΍σΟΫϦϝ ϯτ͕ద࣮࣌ߦ͞ΕΔɻଞʹɺ໋ྩΛղಡ͢Δσίʔμ΍ ͦΕͧΕͷ໋ྩʹಛԽ໋ͨ͠ྩ༻ճ࿏͕͋Δɻ·ͨɺϝϞ Ϧ͔ΒಡΈࠐΜ໋ͩྩσʔλɺFIFO ͔Βड͚औͬͨจࣈ σʔλ͸ͦΕͧΕ໋ྩϨδελʢIRʣ ɺจࣈϨδελʢTRʣ ʹҰ࣌తʹอଘ͞ΕΔɻ. 4.3 ໋֤ྩͷ࣮ߦ 4.3.1 ‫ج‬ຊ໋ྩ Byte ໋ྩ࣮ߦͷλΠϜνϟʔτ͸ਤ 5a ʹࣔ͢ɻF ঢ়ଶͰ ͸ɺΫϩοΫͷ্ཱ͕ͪΓͰ໋ྩಡΈࠐΈ৴߸ͷ read ist ৴߸͕ϋΠϨϕϧʹͳΓɺ໋ྩ͕֨ೲ͞ΕΔϝϞϦʹΞΫ ηε͠ɺσʔλΛ IR ʹసૹ͞ΕΔɻΞΫηεΞυϨε͸. PR ͔Βసૹ͞ΕͨΞυϨεͰ͋Δɻಉ࣌ʹจࣈಡΈࠐΈ ৴߸ read text ৴߸΋ϋΠϨϕϧʹͳΓɺFIFO ͔Β 1 จ ࣈΛಡΈग़͠ɺTR ʹసૹ͞ΕΔɻ ࣍ͷΫϩοΫαΠΫϧͷ্ཱ͕ͪΓͰɺIR ͱ TR ͷσʔ λཱ͕֬͞Εɺ͜ͷΫϩοΫαΠΫϧͰ IR ͷσʔλ͕σ ίʔυ͞ΕɺͲͷ໋ྩΛ࣮ߦ͢Δ͔͕ܾ·Δɻࠓճ͸ Byte ໋ྩ༻ճ࿏͕࣮ߦ͞ΕΔ͜ͱʹͳΔɻಉΫϩοΫαΠΫϧ ͰɺPR ͸ΠϯΫϦϝϯτ͞ΕɺϝϞϦΞΫηε༻Ϩδε λͷ addr ʹσʔλ͕సૹ͞ΕΔɻ ਤ 4 Virtual Machine ͷશମਤ. ࣍ͷΫϩοΫαΠΫϧͷ্ཱ͕ͪΓͰɺByte ໋ྩ༻ճ ࿏ͷτϦΨʔͰ͋Δ Byte r ͕ϋΠϨϕϧʹͳΓɺByte ໋ ྩ༻ճ࿏͕࣮ߦ͞ΕΔɻIR ͕͍࣋ͬͯΔจࣈσʔλͱ TR. ⓒ 2016 Information Processing Society of Japan. 3.

(4) Vol.2016-ARC-221 No.6 2016/8/8. ৘ใॲཧֶձ‫ڀݚ‬ใࠂ IPSJ SIG Technical Report. ͷจࣈσʔλ͕Ұக͢ΔͳΒ͹ɺmatch ৴߸͕ϋΠϨϕϧ. จࣈফඅ৴߸Λ͍࣋ͬͯΔͱ͜Ζ͕ҧ͏ɻΦϓγϣϯ໋ྩ. ʹͳΓɺҰக͠ͳ͚Ε͹ɺfail ৴߸͕ϋΠϨϕϧʹͳΔɻ. ͸Ϛον੒ޭͨ͠৔߹ɺจࣈফඅ৴߸͕ϋΠϨϕϧʹͳΓɺ. match ৴߸‫ ͼٴ‬fail ৴߸͸ɺ੍‫ޚ‬৴߸ੜ੒ճ࿏ͷೖྗͰ. จࣈΛফඅ͢ΔɻҰํɺϚονࣦഊͨ͠৔߹ɺจࣈΛফඅ. ͋Γɺmatch ৴߸͕ϋΠϨϕϧͰ͋Ε͹ɺ࣍ͷΫϩοΫ͔. ͠ͳ͍͕ɺFail ॲཧ͕‫͜ى‬Βͣɺ࣍ͷ໋ྩʹਐΉɻઌಡΈ. Β৽ͨͳ໋ྩϑΣονΛ࣮ߦ͢ΔΑ͏ʹ੍‫ޚ‬৴߸͕ੜ੒͞. ໋ྩʢNByte, NSet) ͷ࣮ߦ΋ Byte,Set ໋ྩͷ࣮ߦͱྨࣅ. ΕΔɻҰํɺfail ৴߸͕ϋΠϨϕϧͷ৔߹ɺFail ॲཧΛ࣮. ͢Δ͕ɺ͜ΕΒͷ໋ྩͰ͸จࣈΛফඅ͠ͳ͍ɻ. ߦ͢Δ੍‫ޚ‬৴߸͕ੜ੒͞ΕΔɻFail ॲཧͰ͸ɺFail ελο Ϋ͔ΒσʔλΛϙοϓΞοϓ͠ɺͦͷσʔλΛ PR ʹసૹ ͠ɺ࣍ͷ໋ྩΞυϨεʹઃఆ͞ΕΔɻ. 4.3.3 ෼‫ྩ໋ذ‬ ෼‫ʹྩ໋ذ‬͸ɺJump ໋ྩ͕͋ΔɻJump ໋ྩ࣮ߦͷλΠ Ϝνϟʔτ͸ਤ 6 ʹࣔ͢ͱ͓ΓͰ͋ΔɻE ঢ়ଶͰ͸ɺσίʔ υͨ݁͠ՌɺJump ໋ྩͷ࣮ߦͷτϦΨʔͰ͋Δ Jump r ͕ ϋΠϨϕϧʹͳΓɺPR ͷτϦΨʔͰ͋Δ PR lat ৴߸΋ϋ ΠϨϕϧʹͳΔɻ͜ͷͱ͖ɺΠϯΫϦϝϯτ৴߸ͷ PR inc ͸ϩʔϨϕϧͰ͋ΔͨΊɺδϟϯϓઌͷΞυϨεΛ࣋ͬͯ ͍Δ PC data in ͷ஋͕ PR ͷ஋ʹஔ͖‫͑׵‬ΒΕΔɻ࣍ͷ ΫϩοΫαΠΫϧͰɺϝϞϦΞυϨεϨδελ addr ʹগ ͠஗Εͯ PR ͷ஋͕औΓࠐ·ΕΔɻ·ͨɺ࣍ͷΫϩοΫα ΠΫϧͷ্ཱ͕ͪΓͰ৽ͨͳ໋ྩϑΣον͕࢝·Δɻ. (a) Byte. (b) Rbyte. ਤ 5 Byte ໋ྩ‫ ͼٴ‬Rbyte ໋ྩ࣮ߦͷλΠϜνϟʔτ. Byte ໋ྩ͸ɺIR Λ͍࣋ͬͯΔ̍จࣈͷσʔλͱ TR ͷ จࣈσʔλΛൺֱ͢Δͷʹରͯ͠ɺSet ໋ྩ͸ TR ͷจࣈ͕ ෳ਺ͷจࣈͷதͷͲΕ͔ͱҰக͢Δ͔ΛධՁ͢Δ໋ྩͰ͋ ΔɻSet ໋ྩΛ࣮ߦ͢ΔͨΊʹɺSet ςʔϒϧΛ࢖͏ɻSet ςʔϒϧ͸ෳ਺ͷ 256 Ϗοτྻ͔ΒͳΔɻ256 Ϗοτྻʹɺ. ASCII දͷ n ൪໨ͷจࣈͱϚονͤ͞ΔͳΒɺn Ϗοτ໨ Λ’1’ ʹ͠ɺϚονͤ͞ͳ͍ͳΒɺ’0’ ʹ͢ΔɻSet ςʔϒ ϧ͸໋ྩͷόΠτίʔυͱಉ࣌ʹੜ੒͞Ε͍ͯΔɻ͜ͷΑ ͏ʹͯ͠ɺ༩͑ΒΕͨจࣈΛ Set ςʔϒϧʹরΒ͠߹Θͤ. ਤ 6 Jump ໋ྩ࣮ߦͷλΠϜνϟʔτ. ͯɺରԠͨ͠Ϗοτͷ஋͕’1’ Ͱ͋Ε͹Ϛον੒ޭɺ’0’ Ͱ͋Ε͹ϚονࣦഊͱͳΔɻ. 4.3.4 ελοΫૢ࡞໋ྩ ελοΫૢ࡞໋ྩʹ͸ɺCallɺAltɺReturnɺSucc ͕͋Δɻ. 4.3.2 ಛԽ໋ྩ. Non-Terminal Λ‫ͼݺ‬ग़໋͢ྩ͕ Call ໋ྩͰ͋ΓɺͦΕΛ. ಛԽ໋ྩ Rbyte ͷ࣮ߦͰ͸ɺF ঢ়ଶɺD ঢ়ଶ͸ Byte ໋. ‫ͼݺ‬ग़ͨ͠ϓϩάϥϜ΁࣮ߦ੍‫ޚ‬Λฦ͢ͷ͕ Return ໋ྩͰ. ྩͱಉ༷Ͱ͋Δɻͦͷ༷ࢠ͸ਤ 5b ʹࣔ͢ͱ͓ΓͰ͋Δɻ. ͋ΔɻCall ໋ྩ͸ɺϓϩάϥϜϨδελ PR ͷ஋Λ Return. Ex ঢ়ଶͰ͸ɺIR ͕͍࣋ͬͯΔ໋ྩͷର৅σʔλͱ TR ͷ. ελοΫʹϓογϡμ΢ϯͯ͠ୀආͤ͞ɺNon-Terminal ͷ. จࣈσʔλ͕Ұகͨ͠৔߹ɺnext txt ৴߸͕ϋΠϨϕϧ. ઌ಄൪஍Ͱ͋ΔΞυϨεΛ PR ʹసૹ͢ΔɻCall ໋ྩͷ࣮. ͱͳΔɻ͜ͷ৔߹ɺ࣍ͷΫϩοΫαΠΫϧͷ্ཱ͕ͪΓͰ. ߦ͸ Jump ໋ྩͱࣅ͓ͯΓɺͨͩ͠৽ͨͳΞυϨεΛ PR. จࣈಡΈࠐΈ৴߸ͷ read txt ͕ϋΠϨϕϧͱͳΓɺFIFO. ʹసૹ͢Δͱಉ࣌ʹɺReturn ελοΫʹϓογϡμ΢ϯ. ͔Β 1 จࣈΛಡΈग़͢ɻ࣍ͷΫϩοΫαΠΫϧͰɺIR ͷ. Λߦ͏ɻ. ͍࣋ͬͯΔ໋ྩͷର৅σʔλͱ৽ͨͳ TR ͷจࣈσʔλΛ. Return ໋ྩ͸ɺCall ໋ྩʹΑͬͯελοΫʹୀආͨ͠. ൺֱ͢ΔɻҰக͢Ε͹ɺ·ͨ FIFO ͔Β৽ͨͳจࣈΛಡΈ. Non-Terminal ͔Βͷ໭Γ൪஍ΛϙοϓΞοϓͯ͠ PR ΁. ࠐ·ΕΔɻIR ͷ͍࣋ͬͯΔ໋ྩͷର৅σʔλͱ TR ͷจ. సૹ͢Δɻ͜ΕʹΑͬͯɺNon-Terminal Λ‫ͼݺ‬ग़ͨ͠ϓ. ࣈσʔλ͕Ұக͠ͳ͘ͳΔ·Ͱɺ͜ͷॲཧ͕‫܁‬Γฦ͞ΕΔɻ. ϩάϥϜ΁࣮ߦ੍‫͕ޚ‬ฦ͞ΕΔɻReturn ໋ྩ࣮ߦͷλΠ. Ұக͠ͳ͍৔߹ɺnext ist ৴߸͕ϋΠϨϕϧͱͳΓɺ࣍ͷ. Ϝνϟʔτ͸ਤ 7 ʹࣔ͢ͱ͓ΓͰ͋Δɻ. ΫϩοΫ͔Β৽ͨͳ໋ྩϑΣονΛ࣮ߦ͢Δɻ Φϓγϣϯ໋ྩʢObyte, Oset) ΋ಉ༷ʹ࣮ߦ͞ΕΔ͕ɺ. ⓒ 2016 Information Processing Society of Japan. E1 ঢ়ଶͷΫϩοΫαΠΫϧͷ্ཱ͕ͪΓͰɺReturn ໋ ྩ࣮ߦͷτϦΨʔͰ͋Δ Return r ৴߸͕ϋΠϨϕϧʹͳ. 4.

(5) Vol.2016-ARC-221 No.6 2016/8/8. ৘ใॲཧֶձ‫ڀݚ‬ใࠂ IPSJ SIG Technical Report. ຊମͷ࣮૷Ͱ༻͍ͨϦιʔε࢖༻ྔ͸ද 3 ʹࣔ͢ͱ͓ΓͰ ͋Δɻ ද 3 Ϧιʔε࢖༻ྔ Ϧιʔεɹ. ࢖༻཰ (%). ࢖༻ྔɹ. ར༻Մೳɹ. LUT. 323. 17600. 1.84. FF. 196. 35200. 0.56. ϩδοΫηϧɹ. 565. 28000. 2.02. ‫Ͱ఺࣌ݱ‬͸ɺ࢛ଇԋࢉΛද͢ͳͲͷ؆୯ͳ PEG ʹର͠ ͯɺਖ਼͘͠ಈ࡞͢Δ͜ͱ͕֬ೝͰ͖ͨɻද 3 ʹ‫ͨ͠ࡌه‬Ϧ ιʔε͸ PEG ϑΝΠϧ‫ͼٴ‬จࣈྻͷෳࡶ౓ʹґଘ͠ͳ͍ɻ ਤ 7 Return ໋ྩ࣮ߦͷλΠϜνϟʔτ. ͨͩ͠ɺBlockRAM ͷ࢖༻ྔ͸ PEG ϑΝΠϧ‫ͼٴ‬จࣈྻ ͷෳࡶ౓ʹґଘ͢Δɻ. ΔɻಉΫϩοΫαΠΫϧͰ Return ελοΫͷಡΈग़͠৴ ߸ read stk ͕ϋΠϨϕϧʹͳΓɺσʔλ͕ data stk Ϩδ ελʹసૹ͞ΕΔɻ࣍ͷΫϩοΫαΠΫϧͰ PR ͷॻ͖‫׵‬ ͑σʔλ PC data in ʹগ͠஗Εͯ data stk ͷσʔλ͕औ Γࠐ·ΕΔɻ࣍ͷΫϩοΫαΠΫϧͷ্ཱ͕ͪΓͰ PR ͷ ৽ͨͳΞυϨεཱ͕֬͠ɺগ͠஗Ε໋ͯྩΞυϨεͷ addr Ϩδελʹసૹ͞ΕΔɻ͜ͷ࣌఺Ͱ Return ελοΫ͔Β ϙοϓΞοϓͨ͠ΞυϨε͸࣍ͷ໋ྩΛࢦ͢Α͏ʹͳΔɻ ࣍ʹ৽ͨͳ໋ྩϑΣον͕࢝·Δɻ ҰํɺPEG Ͱ͸ɺόοΫτϥοΫ͕͋Δ [9], [11]ɻόο ΫτϥοΫ͸ɺબ୒ࢶͷதͰϚον͕ࣦഊͨ͠৔߹ɺલͷ ঢ়ଶʹ໭Γɺผͷબ୒ࢶΛධՁ͢Δ࢓૊ΈͰ͋Δɻબ୒͕ ͋Δ৔߹ɺબ୒ࢶΛධՁ͢ΔલʹɺόΫτϥοΫ͕‫͜ى‬Δ. BlockRAM ͸ɺ໋ྩྻྖҬɺελοΫྖҬɺSet ςʔϒ ϧͰ࢖ΘΕ͍ͯΔɻ໋ྩྻྖҬ‫ ͼٴ‬Set ςʔϒϧʹ༻͍Β ΕΔϝϞϦྔ͸ PEG ϑΝΠϧʹґଘ͢Δɻྫ͑͹ɺਤ 1 ʹ࢛ࣔ͢ଇԋࢉΛද͢ PEG ͷ৔߹ɺ4 ͭͷϧʔϧ͔Β 34 ͷ໋ྩ͕ੜ੒͞ΕΔɻҰͭͷ໋ྩ͸ 16bit Ͱ͋ΔͨΊɺ໋ ྩྻྖҬʹ 34×16bit ͕࢖ΘΕ͍ͯΔɻ·ͨɺSet ςʔϒ ϧʹ 3 ྻ͕ඞཁͰ͋Γɺͭ·Γ 3×256bit ͕࢖ΘΕ͍ͯΔɻ ໋ྩྻྖҬ‫ ͼٴ‬Set ςʔϒϧͰ࢖ΘΕΔ BlockRAM ͸߹ ‫ Ͱܭ‬1312bit ͱͳΓɺ౥ࡌ͞Εͨ 240KByte BlockRAM ͷ. 0.068%Ͱ͋Δɻ ҰํɺελοΫʹ࢖ΘΕΔϝϞϦྔ͸จࣈྻͷ௕͞΍ߏ ଄ʹґଘ͢ΔͨΊɺͲͷఔ౓ͷϝϞϦΛ֬อ͢Ε͹Α͍͔ ͸ࠓ‫ޙ‬ͷ՝୊ͱͳΔɻ. ͱ͖ͷ໭ΓઌΛ Fail ελοΫʹϓογϡμ΢ϯ͢Δɻ͜ͷ ૢ࡞Λߦ͏ͷ͸ Alt ໋ྩͰ͋Δɻ ·ͨɺͲ͔͜ͰϚον͕ࣦഊͨ͠৔߹ɺόοΫτϥοΫ ͕‫͜ى‬Δɻ͜ͷͱ͖ɺFail ॲཧ͕ߦΘΕɺFail ελοΫ͔ ΒϙοϓΞοϓ͞ΕͨΞυϨεΛ PR ʹసૹ͞Εɺ࣍ʹ࣮ ߦ͞ΕΔ໋ྩͷΞυϨεʹͳΔɻҰํɺແࣄʹϚονͰ͖ ͨ৔߹ɺଞͷબ୒ࢶΛධՁ͢Δඞཁ͕ͳ͘ͳΔͨΊɺFail ελοΫʹอଘͨ͠ΞυϨε͕আ‫͞ڈ‬ΕΔɻ͜ͷૢ࡞Λߦ ͏ͷ͸ Succ ໋ྩͰ͋Δɻ. Alt ໋ྩͱ Succ ໋ྩͷಈ࡞͸ Call ໋ྩɺReturn ໋ྩͱ ࣅ͍ͯΔ͕ɺ྆ऀͷҧ͍͸ Alt ໋ྩͱ Succ ໋ྩ͕ελο ΫΛૢ࡞͢Δ͚ͩͰɺPR ʹσʔλΛసૹ͠ͳ͍఺Ͱ͋Δɻ. 6. ·ͱΊ ຊߘͰ͸ɺղੳද‫ݱ‬จ๏ʢPEGʣʹಛԽͨ͠ Virtual Ma-. chine ʹ͍ͭͯड़΂ͨɻඞཁ࠷খ‫ݶ‬ͷճ࿏͚ͩ౥ࡌ͠ɺ·ͨ PEG ԋࢉࢠʹಛԽͨ͠ճ࿏ʹΑΓɺίϯύΫτ͔ͭޮ཰ ͕Α͍ϚονϯάϚγϯ͕࣮‫͖ͨͰݱ‬ɻVirtual Machine ຊମ͕ඇৗʹখ͍ͨ͞Ίɺಉ͡ FPGA ʹෳ਺ͷ Virtual. Machine ΛࡌͤɺฒྻͰಈ࡞ͤ͞Δ͜ͱʹΑͬͯɺߴ͍ε ϧʔϓοτͷϚονϯάϚγϯ͕‫ظ‬଴Ͱ͖Δɻ ‫Ͱ఺࣌ݱ‬͸ɺ࢛ଇԋࢉΛද͢ͳͲͷ؆୯ͳ PEG ϑΝΠ ϧʹରͯ͠ਖ਼͘͠ಈ࡞Ͱ͖ͨɻελοΫʹ࢖ΘΕΔϝϞϦ ͷ‫ੵݟ‬ɺ‫ͼٴ‬ΑΓෳࡶͳσʔλߏ଄ΛॲཧͰ͖ΔΑ͏ʹճ ࿏Λ֦ு͢Δͷ͸ࠓ‫ޙ‬ͷ՝୊ͱͳΔɻ. 5. ੑೳධՁ ຊ‫Ͱڀݚ‬͸ɺXilinx ࣾͷ Zynq xc7z010-1clg400c Λ౥ࡌ. ࢀߟจ‫ݙ‬. ͨ͠ Zynq-7000 ධՁϘʔυͰ࣮૷ͨ͠ɻ·ͨɺVHDL ʹΑ. [1]. Δ RLT ‫ه‬ड़Ͱߦ͍ɺ࿦ཧ߹੒΍഑ஔ഑ઢɺγϛϡϨʔγϣ. [2]. ϯͳͲʹ͸ Vivado Suite Design 2015.3 Λ༻͍͍ͯΔɻΫ ϩοΫप೾਺͸ 125MHz Ͱ͋Δɻ ϗετͱͷΠϯλʔϑΣʔεΛআ͍ͨ Virtual Machine. ⓒ 2016 Information Processing Society of Japan. [3]. Ford, B.: Parsing expression grammars: A recognitionbasedsyntactic foundation. In Proc. of POPL04, 2004. Ford, B.: Packrat Parsing and Parsing Expression Grammars Pages.http://bford.info/packrat/ Sidhu, R. and Prasanna, V.K.: Fast Regular Expression Matching using FPGAs. In Proc. of FCCM01, 2001.. 5.

(6) ৘ใॲཧֶձ‫ڀݚ‬ใࠂ IPSJ SIG Technical Report. [4]. [5] [6] [7]. [8]. [9]. [10] [11]. [12]. Vol.2016-ARC-221 No.6 2016/8/8. Yang, Y.E., Jiang, W. and Prasanna, V.K.: Compact Architecture for High Throughput Regular Expression Matching on FPGA. In Proc. of ANCS08, pp. 30-39, 2008. Medeiros, S. and Ierusalimschy, R.: A Parsing Machine for PEGs. In Proc. of DLS08, 2008. Kuramitsu, K.: Packrat Parsing with Elastic Sliding Window. In IPSJ Programming Meeting, 2014. Yamagaki, N., Sidhu, R. and Kamiya, S.: Highspeed regular expression matching engine using multicharacter nfa. In Proc. of FPL 08, 2008. Lin, C.H., Jiang, C.P. and Chang, S.C.: Optimization of Pattern Matching Circuits for Regular Expression on FPGA. In Proc. of IEEE TVLSI06, 2006. Aho, A. V., and Ullman, J. D.: The Theory of Parsing, Translation and Compiling, Vol. I,ʠParsingʡ. Prentice Hall, 1972. Kuramitsu, K.: Nez: practical open grammar language. In Proc. of ACM SPLASH/Onward 2016, 2016. Birman, A., and Ullman, J. D.: Parsing algorithms with backtrack. Information and Control 23, pp. 1âĂŞ34, 1973. Ford, B.: Packrat parsing: simple, powerful, lazy, linear time. In Proc.of ICFP02, pp. 36-47, 2002.. ⓒ 2016 Information Processing Society of Japan. 6.

(7)

参照

関連したドキュメント

Gamma function; Beta function; Riemann-Liouville Fractional deriva- tive; Hypergeometric functions; Fox H-function; Generating functions; Mellin transform; Integral representations..

Its layer-to-layer transfer matrix is a polynomial of two spectral parameters, it may be re- garded in terms of quantum groups both as a sum of sl(N) transfer matrices of a chain

In this lecture, we aim at presenting a certain linear operator which is defined by means of the Hadamard product (or convolu- tion) with a generalized hypergeometric function and

It can be shown that cubic graphs with arbitrarily large girth exist (see Theorem 3.2) and so there is a well-defined integer µ 0 (g), the smallest number of vertices for which a

The key point is the concept of a Hamiltonian system, which, contrary to the usual approach, is not re- lated with a single Lagrangian, but rather with an Euler–Lagrange form

By employing the theory of topological degree, M -matrix and Lypunov functional, We have obtained some sufficient con- ditions ensuring the existence, uniqueness and global

In this work, we have applied Feng’s first-integral method to the two-component generalization of the reduced Ostrovsky equation, and found some new traveling wave solutions,

Thus, we use the results both to prove existence and uniqueness of exponentially asymptotically stable periodic orbits and to determine a part of their basin of attraction.. Let