æ£è¦è¡¨ç¾ã¨æ§æå³ã«ã¤ãã¦è§£èª¬ãã¾ãããªã¼ãããã³ã«ã¤ãã¦ã詳ããè¿°ã¹ã¾ãããªã¼ãããã³ã»ã¹ã´ãã¯ã§éã³ã¾ãããï¼
ä¸éã§ããç¥ããã¦ããï¼ä½¿ããã¦ããæ¦å¿µã»æ¹æ³ã«ã¯ãã ããããåï¼æªå±±ï¼ã®æè¦ã§ä¸çªããããããã¨æãããçæ¸ãã¨ç¨èªæ³ï¼å³å¼æ³ã使ã£ã¦èª¬æãã¾ãããã®è¨äºã«ç®ãéãã¦âæãâãæ´ããããå½¢å¼è¨èªçè«ã®æç§æ¸ãèªã¿å§ãããã¨ãåºæ¥ãã§ãããã
[追è¨]ãã®è¨äºã®å 容ã«å¯¾ããå ·ä½ä¾ã¯ããæ£è¦è¡¨ç¾ã¨ãªã¼ãããã³ï¼ãªãã ç°¡åããããJavaScriptã«ããå®è£ ãã«ããã¾ãã[/追è¨]
å 容ï¼
- æ£è¦è¡¨ç¾
- æ£è¦è¡¨ç¾ã®ä¾
- æ§æå³
- ã¹ãã¬ã¼ãã¯ã¤ã¤ã¼ã«ããã¬ã¤ã¢ã¦ã調æ´
- æéç¶æ ãªã¼ãããã³
- æéç¶æ ãªã¼ãããã³ã®å®è¡
- ããã¯ãã©ãã¯ã¨å èªã¿
- ã¹ã´ãã¯ã¨ãªã¼ãããã³
- ã³ãããããã使ãã¹ã´ãã¯ã¨ä¸¦åå¦ç
- é決å®æ§ãªã¼ãããã³ã¨æ±ºå®æ§ãªã¼ãããã³
- æ£è¦è¡¨ç¾ã¨ãªã¼ãããã³
- ä»ã®æç®ãèªãã¨ãã®æ³¨æ
é¢é£ããã¨ã³ããªã¼ï¼
- Erlangå®é¨å®¤ï¼ç¶æ é·ç§»ãæ¸ãã®ã¯ãããªã«ç°¡å -- Erlangã«ãããªã¼ãããã³ã®å®è£ ä¾ã§ãã
- ç¶æ é·ç§»æ©æ¢°ã¨é決å®æ§é·ç§» -- ç¶æ é·ç§»ã®åºç¤çãªä¸è¬è«ã§ãã
æ£è¦è¡¨ç¾
ã¾ãã¯æ£è¦è¡¨ç¾ã§ãããããã«ã¤ãã¦ã¯ããç¨åº¦ãåç¥ã§ããã¨ä»®å®ãã¾ããã¨ã¯ãããæ£è¦è¡¨ç¾ã«ã¯è²ã ãªæ¹è¨ãããã¾ãããããã®è¨äºã§ä½¿ãè¨æ³ã確èªãã¦ããã¾ãã
- ã«ã³ãã,ãï¼ é£æ¥ã表ãã¾ãã
- 縦æ£ã|ã ï¼ é¸æã表ãã¾ãã
- çå符ã?ã ï¼ çç¥å¯è½ã§ãããã¨ã表ãã¾ãã
- æå°ã*ã ï¼ ä»»æåï¼0åã§ãããï¼ã®ç¹°ãè¿ãã表ãã¾ãã
æ£è¦è¡¨ç¾ãçµã¿ç«ã¦ãã¨ãã®åºæ¬ç´ æã¨ãªãè¨å·ã¯ãååè¨å·ï¼atomic symbolï¼ãçµç«¯è¨å·ï¼terminal symbolï¼ãæåï¼letterï¼ã¨ãå¼ã°ãã¾ããããã§ã¯åºæ¬è¨å·ã¨ããè¨èã使ãã¾ããï¼ããã«å¯¾ãã¦ãå ã«è§¦ããã«ã³ãã縦æ£ãªã©ã¯ãæ§æçãªæ¼ç®åè¨å·ã§ã*1ãï¼åºæ¬è¨å·ã¯ãa, b ãªã©ã®è±å°æåã§è¡¨ããã¨ã«ãã¾ããè±å°æåã¯ãå®éã®åºæ¬è¨å·ãã®ãã®ã表ãã¨ãã¨ãåºæ¬è¨å·ãå¤ã¨ããå¤æ°ã¨ãã¦ä½¿ããã¨ãããã¾ããããå®æ°ã¨å¤æ°ã®åºå¥ããã¾ãç¥çµè³ªã«ããå¿ è¦ã¯ããã¾ããã
使ç¨ãããã¹ã¦ã®åºæ¬è¨å·ãããªãéåã¯ã¢ã«ãã¡ãããã¨å¼ã°ãã¾ããã¢ã«ãã¡ãããã¯ãè±åã®éåã¨ã¯éãããã©ããªéåã§ããã¾ãã¾ãããä¾ãã°ã1ãã100ã¾ã§ã®æ´æ°ã®éåãã¢ã«ãã¡ãããã¨ãã¦ãããã®ã§ããã¨ãã«ãç¡ééåãã¢ã«ãã¡ãããã«ãããã¨ãããã¾ãã以ä¸ã§ã¯ãã¢ã«ãã¡ããããAã§è¡¨ãã¾ã*2ã
念ã®ããã«ãæ£è¦è¡¨ç¾ã®å®ç¾©ããã¡ãã¨è¿°ã¹ã¦ããã¾ãã
- åºæ¬è¨å·ã¯æ£è¦è¡¨ç¾ã§ããã
- E, F ãæ£è¦è¡¨ç¾ã®ã¨ãã(E, F) ã¯æ£è¦è¡¨ç¾ã§ããã
- E, F ãæ£è¦è¡¨ç¾ã®ã¨ãã(E | F) ã¯æ£è¦è¡¨ç¾ã§ããã
- E ãæ£è¦è¡¨ç¾ã®ã¨ããE? ã¯æ£è¦è¡¨ç¾ã§ããã
- E ãæ£è¦è¡¨ç¾ã®ã¨ããE* ã¯æ£è¦è¡¨ç¾ã§ããã
- 以ä¸ã«å®ç¾©ãããã®ã ããæ£è¦è¡¨ç¾ã§ããã
ãã®ãããªå®ç¾©ã®æ¹æ³ã帰ç´çå®ç¾©ï¼inductive definitionï¼ã¨ããã¾ãã帰ç´çå®ç¾©ãç°¡ç¥ã«è¡¨ãããã«æ£è¦è¡¨ç¾ã使ããããã¨ãããã¾ãã次ã¯ãæ£è¦è¡¨ç¾ã帰ç´çã«å®ç¾©ããæ£è¦è¡¨ç¾ãã§ããx ã¯åºæ¬è¨å·ãE ã¯æ£è¦è¡¨ç¾ã表ãã¾ãã
- E ::= x | '(' E ',' E ')' | '(' E '|' E ')' | E '?' | E '*'
ç°¡ç¥ããã¦ããã£ã¦åããã«ããããããã¾ããããããããªãã¦ããå¥ã«æ°ã«ããªãã¦ããã§ããã
æ£è¦è¡¨ç¾ã®ä¾
ã¢ã«ãã¡ãããAããA = {a, b, c} ã¨ãã¦ãããã¤ãã®æ£è¦è¡¨ç¾ã®äºä¾ã示ãã¾ãã
- a
- (a, b)
- c*
- ((a | b) | c)
- (a, ((a | b) | c)?, b*)
- ((a, ( b | c), b?)*, (a*, c))
((a, b), c) 㨠(a, (b, c)) ã¯åãã¨ã¿ãªã㦠(a, b, c) ã¨æ¸ãã¦ããããã¨ã«ãã¾ãã((a | b) | c) 㨠(a | (b | c)) ãåæ§ã§ã ã©ã¡ãã (a | b | c) ã¨æ¸ãã¾ãã
æ¼ç®åã®åªå é ä½ï¼çµåã®å¼·åº¦ï¼ã次ã®ããã«å®ç¾©ãã¾ãããã
- åªå é ä½ãé«ãï¼çµåã®å¼·åº¦ãå¼·ã ã?ãã¨ã*ã
- åªå é ä½ãä¸ãããï¼çµåã®å¼·åº¦ãä¸ããã ã,ã
- åªå é ä½ãä½ãï¼çµåã®å¼·åº¦ãå¼±ã ã|ã
ãã®åªå é ä½ã«åºã¥ãã丸æ¬å¼§ã¯é©å®çç¥ãããã¨ã«ãã¾ããã¾ããå æ¸ä¹é¤ã§æãç®è¨å·ãçç¥ããã®ã¨åæ§ã«ãé£æ¥ã®æ¼ç®åã,ããçç¥ãããã¨ãããã¾ãã
以ä¸ã®çç¥ã«ã¼ã«ãé©ç¨ããã¨ã(a, ((a | b) | c)?, b*) 㯠a(a|b|c)?b* ã¨çãæ¸ãã¾ãããã ãããã®è¨äºå ã§ã¯ã«ã³ãã¯çç¥ããã«ã¡ããã¨æ¸ãã¾ãã
æ§æå³
æ§æã®å®ç¾©ã«æ§æå³ã使ã£ãäºä¾ã¨ãã¦ã¯ãJSONãæåã§ãããä¾ãã°ã次ã¯ãJSONãªãã¸ã§ã¯ããã®æ§æãå®ç¾©ããæ§æå³ã§ããï¼[追è¨]ãã®å³ã«é¢ãã注æã¨ãã¦ãã³ã¡ã³ãæ¬ãåç §ã®ãã¨[/追è¨]ï¼
Wikipediaã®é ç® http://en.wikipedia.org/wiki/Syntax_diagram ã«ãæ§æå³ã®ä¾ãããã¤ãè¼ã£ã¦ãã¾ãã
æ§æå³ï¼syntax diagramï¼ã¯ããã種ã®æåã°ã©ãã§ãããã¼ãã¨åãã®ä»ãã辺ããæ§æããã¾ããåãã示ãã®ã«æ®éã¯ç¢å°ã使ãã¾ãããããã§ã¯é»è·ï¼chargeï¼ãä½µç¨ãã¾ããé»è·ï¼æ¥µæ§ï¼polarityï¼ã¨ã符å·ï¼signï¼ã¨ãããã¾ãï¼ã¯ããã©ã¹ã¨ãã¤ãã¹ã®ãã¨ã§ããé»è·ã¨åãã®é¢ä¿ã¯æ¯åº¦æ©ãã®ã§ããããã¤ãã¹ãããã©ã¹ã®åãã¨æ±ºãã¾ãã
ãã¤ãã¹è¨å·ãæããããã¼ããå§ç¹ããã©ã¹è¨å·ãæããããã¼ããçµç¹ã«ãªãã¾ãã
ã§ã¯ãæ£è¦è¡¨ç¾ã®å¸°ç´çãªå®ç¾©ã«æ²¿ã£ã¦ã対å¿ããæ§æå³ãå®ç¾©ãã¦ããã¾ãããã以ä¸ã«ç´¹ä»ããæãæ¹ã¯ä¸çªæ¨æºçã¨ããããã§ã¯ããã¾ããããåã¯ããã使ããããã¨æã£ã¦ãã¾ã*3ã
åºæ¬è¨å·
åºæ¬è¨å·ã¯æ¬¡ã®ããã«æãã¾ããåºæ¬è¨å·ãæããããã¼ããè¨å·ãã¼ãã¨å¼ã¶ãã¨ã«ãã¾ããè¨å·ãã¼ã以å¤ã«ãå§ç¹ã®ãã¤ãã¹ãã¼ãã¨çµç¹ã®ãã©ã¹ãã¼ããæãã¾ã*4ã
é£æ¥
ä¸è¬ã«ããªãããã®æ£è¦è¡¨ç¾ã«å¯¾å¿ããå³ãåè§ã§æããã¨ã«ãã¾ããEãF ãªã©ã®è±å¤§æåã¯ãæ¢ã«æããã¦ããå³ã«ä»ããå¼ã³åã§ããé£æ¥ (E, F) ãå³ç¤ºããã¨æ¬¡ã®ããã«ãªãã¾ãããã©ã¹ãã¼ãã¨ãã¤ãã¹ãã¼ããæ¥åããã¦é»ä¸¸ã®ãã¼ãã«ãªããã¨ã«æ³¨æãã¦ãã ããã
é¸æ
次ã¯é¸æã§ãããã¤ãã¹ãã¼ãã©ããããã©ã¹ãã¼ãã©ãããéãåããã¾ããéãªã£ããã¼ãéã¯ã1ã¤ã®ãã¤ãã¹ãã¼ãã¨1ã¤ã®ãã©ã¹ãã¼ãã«ãªãã¾ãã
çç¥å¯è½
çç¥å¯è½æ§ï¼ãªãã·ã§ãã«ï¼ãå³ç¤ºããã«ã¯ããã¤ãã¹ãã¼ããããã©ã¹ãã¼ãã«è¾ºãä¸æ¬å ãã¾ããå ãã辺ã¯ãä¸éã«ãã¼ããæããªãåãªãã¯ã¤ã¤ã¼ã§ãã
ç¹°ãè¿ã
æå¾ã¯ç¹°ãè¿ãã®å³ç¤ºã§ãããã¯ã¤ã¤ã¼ãæ¬ä½ã«ã°ã«ãªã¨å·»ãã¤ãã¦ãã¹ã¿ã¼ãã®ãã¤ãã¹ãã¼ããééããã¦åæ¹ã«åºãæãã§ã*5ã
[追è¨]ãã®ç¹°ãè¿ãã®æ§æã¯ããã¼ãã®åæ°ãç¯ç´ãéãã§ãããç¹°ãè¿ããä½ãç®çã¯éæãã¦ã¾ãããé£æ¥ãé¸æã®æ§æãä¸ç·ã«ä½¿ãã¨ãã¯å ·åãæªãããããã¾ãããéå§ç¹ã§ãããã¼ãã«å ¥ã辺ãããã¨ãç¶æ é·ç§»ã®æå³ãã¬âéæµâãâæ··ç·âãèµ·ãã¾ãããã¾ãã±ãã±ãããã«ãã¼ãã1åå¢ãããã»ããç¡é£ã§ãã[/追è¨]
ã¹ãã¬ã¼ãã¯ã¤ã¤ã¼ã«ããã¬ã¤ã¢ã¦ã調æ´
ä»å°å ¥ããæ¹æ³ã§æ£è¦è¡¨ç¾ãå³ç¤ºããã¨ããã¼ãæ°ãå°ãªãã³ã³ãã¯ããªçµµãæãã¾ããããããã¬ã¤ã¢ã¦ãçã«ã¯çª®å±ãªå°è±¡ã«ãªããã¯ã¤ã¤ã¼ã®å¼ãåããã´ãã£ã´ãã£ããã¡ã§ããä¾ãã°ãæ£è¦è¡¨ç¾ *6ãεã¯ãåºæ¬è¨å·ãåºç¾ããªããã¨ãã¤ã¾ã空åã表ãã®ã§ã(ε, E) = (E, ε) = E ã¨ãªããé£æ¥æ¼ç®ã®åä½å ã¨ãªãã¾ã*7ãεã«å¯¾å¿ããã¹ãã¬ã¼ãã¯ã¤ã¤ã¼ã¯æ¬¡ã®ããã§ãã
εã«å¯¾å¿ããã¹ãã¬ã¼ãã¯ã¤ã¤ã¼ãä»ã足ãã¦ãé»ä¸¸ã®ãã¼ããå¢ããã ãã§æ§æå³ã®ã¤ãªããå ·åã¯å¤æ´ããã¾ãããæ§æå³ã®ä¸¡ç«¯ã ãã§ã¯ãªãã¦ãä¸éã®ã¯ã¤ã¤ã¼ãã¡ããåã£ã¦ã¹ãã¬ã¼ãã¯ã¤ã¤ã¼ãæãã§ããã¾ãã¾ããããã®ã¨ãé»ä¸¸ãã¼ãã2åå¢ãã¾ããé»ä¸¸ãã¼ãã¯ãã¤ãªããå ·åï¼ãããã¸ã¼ï¼ã«ã¯å½±é¿ããªãã®ã§é©å½ã«å¢ããããæ¸ããã¦ããã¾ãã¾ããã
æéç¶æ ãªã¼ãããã³
æ£è¦è¡¨ç¾ããä½ã£ãæ§æå³ã¯ããã®ã¾ã¾ãªã¼ãããã³ã¨ãã¦ä½¿ãã¾ãã
ã¾ããæ§æå³ã®ãã¤ãã¹ãã¼ãããã©ã¹ãã¼ããé»ä¸¸ãã¼ãã«é©å½ã«çªå·ããµãã¾ãããããããè¨å·ãã¼ããåãé¤ããåãå ´æã«åãè¨å·ãâ辺ï¼ã¯ã¤ã¤ã¼ï¼ã®ã©ãã«âã¨ãã¦è²¼ãã¤ãã¾ãããã®æä½ã«ããã次ã®ãããªã辺ã«ã©ãã«ãä»ããæåã°ã©ãããã§ãã¾ãããã ãããã¨ã®ã¤ãã·ãã³è¾ºã«ã¯ã©ãã«ãä»ãã¦ã¾ããã
ãã®æåã°ã©ãã®ãã¼ããç¶æ ç¹ã§ããæå辺ãç¶æ é·ç§»ï¼ã®çµè·¯ï¼ã表ãã¾ããï¼å®éã®ç¶æ é·ç§»æé ã¯ããå¾ã§è¿°ã¹ã¾ããï¼ãã¨ã®ãã¤ãã¹ãã¼ããå§ç¶æ ããã¨ã®ãã©ã¹ãã¼ããçµç¶æ ã¨ããç¹å¥ãªç¶æ ã¨ãã¦èå¥ããã¾ãã
ãã®ããã«ãã¦æ£è¦è¡¨ç¾ããä½ãããæéç¶æ ãªã¼ãããã³ã¯ã©ã®ããã«åä½ããã®ã§ããããã次ã®ç¯ã§è¿°ã¹ã¾ãã
æéç¶æ ãªã¼ãããã³ã®å®è¡
ãªã¼ãããã³ã¯ãç¶æ é·ç§»ãã·ã³ã®ä¸ç¨®ã§ããå®éã®ã³ã³ãã¥ã¼ã¿ãããã»ã¹ã¨åæ§ã«ãé次å®è¡æ¹å¼ã¨ä¸¦åå®è¡æ¹å¼ãããã¾ãããããã§ã¯é次å®è¡ï¼ç´åé 次å®è¡ï¼ãèãã¾ãããã·ã³ã®ç¾ç¶æ ï¼ã«ã¬ã³ãã¹ãã¼ãï¼ã常ã«1ã¤æ±ºã¾ã£ã¦ãã¾ããå ¥åãããã¨ããã®å ¥åã«ããªã¬ã¼ããã¦ãç¶æ ãå¤åãã¾ãããããç¶æ é·ç§»ã§ãããå¤åãããã«ã¯ç¶æ ãå¤ãããªãï¼åãç¶æ ã«ã¨ã©ã¾ãï¼ãã¨ãå«ã¾ãã¾ããç¶æ ã¨ç¶æ é·ç§»ã¯ãæåã°ã©ãã®ãã¼ãã¨è¾ºã«ããå®å ¨ã«è¨è¿°ããã¾ãã
æ£è¦è¡¨ç¾ã«å¯¾å¿ãããªã¼ãããã³ã«å ¥åå¯è½ãªãã¼ã¿ã®éåã¯ãæåã«æå®ããã¢ã«ãã¡ãããAã§ããä¾ãã°ãA = {a, b, c}ãå ¥åçµäºãæ示çã«ç¥ãããã¨ã³ããã¼ã«ã¼è¨å·ãAã«ä»ãå ãã¾ããã¨ã³ããã¼ã«ã¼ã¯ãç¿æ £ä¸ãã«ãã¼ã¯ã$ãã使ããã¨ãå¤ãããã§ãããã¡ã¤ã«å ¥åã«ä¾ãããªããã$ãã¯EOFï¼End Of Fileï¼ã«å¯¾å¿ããç¹æ®è¨å·ã§ãã以ä¸ã§ã¯ãå ¥åã®æç³»åã [a, b, a, c, $] ã®ãããªãªã¹ãã§è¡¨ããã¨ã«ãã¾ãã
ç¶æ é·ç§»ãã·ã³ã®å®è¡éå§æç¹ï¼ã»ãã¨ã®æ©æ¢°ãªãé»æºæå ¥æç¹ï¼ã§ã¯ãç¶æ ãå§ç¶æ ï¼åãã£ã¦æ±ºã¾ã£ãåæç¶æ ï¼ã«ã»ããããã¾ããåºæ¬è¨å·ã1åå ¥åãããã¨ãããã«ãã£ã¦æ¬¡ã®ç¶æ ç¹ã¸ç§»åãã¾ãããã®ã¨ãã次ã®ã«ã¼ã«ã«å¾ãã¾ãã
- ç¾ç¶æ ç¹ãããâå ¥åãããåºæ¬è¨å·ã¨åãã©ãã«ãä»ãã辺âãåºã¦ããã°ããã®è¾ºããã©ã£ã¦æ¬¡ã®ç¶æ ç¹ã«ç§»åãã¦ããã
- âå ¥åãããåºæ¬è¨å·ã¨åãã©ãã«ãä»ãã辺âã1æ¬ããªãã¨ãã¯å¤±æï¼å¤±æã®å¦çã¯å¾è¿°ï¼
- ç¾ç¶æ ç¹ãããã©ãã«ãä»ãã¦ããªã辺ï¼ã¤ãã·ãã³è¾ºï¼ãåºã¦ããã°ãå ¥åã¨ç¡é¢ä¿ã«èªç±ã«ãã©ã£ã¦ããã
å ¥åã®åãä¾ãã° [a, b, a, a, $] ããªã¼ãããã³ã«ãã£ã¦åçï¼acceptï¼ãããã¨ã¯æ¬¡ã®ãã¨ã§ãã
- å§ç¶æ ãããå ¥åãaãã«ããç¶æ é·ç§»ãæåããã
- ç¾ç¶æ ãããå ¥åãbãã«ããç¶æ é·ç§»ãæåããã
- ç¾ç¶æ ãããå ¥åãaãã«ããç¶æ é·ç§»ãæåããã
- ç¾ç¶æ ãããå ¥åãaãã«ããç¶æ é·ç§»ãæåããã
- ç¾ç¶æ ã¯çµç¶æ ã§ãã¨ã³ããã¼ã«ã¼è¨å·ã$ããå ¥åãããã
ç¶æ é·ç§»ã失æããã¨ãããã®å ¥ååã¯åçä¸å¯è½ãªã¢ãã§ããããï¼ ããã¨ãè¨ããªããã§ããããå¤å°ã®å¤±æããã£ã¦ãã人çãæ¨ã¦ã¡ããããªãããã£ã¦ãã¨ã§ãã詳ããã¯æ¬¡ç¯ã§ã
ããã¯ãã©ãã¯ã¨å èªã¿
ç¶æ é·ç§»ã®ã«ã¼ã«ãåæ²ãã¾ãã
- ç¾ç¶æ ç¹ãããâå ¥åãããåºæ¬è¨å·ã¨åãã©ãã«ãä»ãã辺âãåºã¦ããã°ããã®è¾ºããã©ã£ã¦æ¬¡ã®ç¶æ ç¹ã«ç§»åãã¦ããã
ãã®ã«ã¼ã«ãé©ç¨ãããã¨ããâå ¥åãããåºæ¬è¨å·ã¨åãã©ãã«ãä»ãã辺âã¯ä¸æ¬ã¨ã¯éããªãã®ã§ããããã§é¸æãçããã®ã§ãããã¿ãªé¸æãããã¨ãè¡ãè©°ã¾ã£ã¦ç¶æ é·ç§»ã失æãã¾ããããããé¸æãè¡ã£ãå°ç¹ã¾ã§æ»ã£ã¦å¥ãªé¸æè¢ãé¸ã¶ã¨ã¦ãã¯ãããã¨ãããã¾ãã
æ»ã£ã¦å¥ãªé¸æè¢ãé¸ãã§ããç´ããã¨ãããã¯ãã©ãã¯ã¨ããã¾ããæ®éã¯ãä¸çªæå¾ï¼ç´è¿ï¼ã«é¸æãããå ´æã¾ã§æ»ãã¾ããçè«çã«ã¯ãåãè½ãè¸ã¾ãªãããªããã©ããªæ¹æ³ã§ããã¯ãã©ãã¯ãã¦ããã¾ãã¾ããããåãè½ãè¸ã¾ãªããããã«ã¯ã以åã®é¸æãæ¢ã«å ¥åãããè¨å·åãä¿åãã¦ããå¿ è¦ãããã¾ããããã¯ããªã¼ãããã³å®è£ ã®æéã¨å®è¡å¹çã®ä¸¡æ¹ã®æå³ã§è² æ ã¨ãªãã¾ãã
ããã¯ãã©ãã¯ãããå°½ããã¦ããçµå±ã¯å¤±æãããã¨ãããã¾ãããããªã¨ãã¯ããã®å
¥ååãåçã§ãªããã¨ã«ãªãã¾ããå
¥ååã¯æå¦ï¼refuterefuseï¼ãããã¨ãè¨ãã¾ããåã«ç¶æ
é·ç§»ã失æããããã¨ãã£ã¦ãå
¥åä¾ãæå¦ãããã¨ã¯ã§ãã¾ãããããã¨ããããå¯è½æ§ãããå°½ããã¦ã¿ã¦ãã©ããã£ã¦ããã¡ã ã¨åãã£ã¦åãã¦æå¦ã§ããã®ã§ãã
ããã¯ãã©ãã¯ã¨ä¼¼ãå¹æããããæ¹æ³ã¨ãã¦å èªã¿ãããã¾ããããã¯ãé¸æãä¿çãã¦æ§åè¦ããã®ã§ãã1åã®å ¥åè¨å·ã§å¤æã§ããªãç¶æ³ã§ãå¼ãç¶ãä½åãã®å ¥åãçºãã¦æ±ºå®ãä¸ãã¾ããããã¯ãã©ãã¯ãããã¡ã¢ãã§ãã¨ãããããã£ã¦ã¿ããæ 度ãªã®ã«å¯¾ããå èªã¿ã¯ããã°ããå¾ ã£ã¦ãã決å®ããããæ 度ã§ãããå èªã¿ããä½åãªã¡ã¢ãªãã¡ã«ããºã ãå¿ è¦ãªã®ã§ãå¦çã¯è¤éã«ãªãã¾ãã
ã¹ã´ãã¯ã¨ãªã¼ãããã³
åã説æãããã¿ã£ã¦ãããã¦ãã¯æéçã«å¤åããçµµã使ãã®ã§ãã¢ãã¡ã¼ã·ã§ã³ã使ãã®ãä¸çªå¹æçãªæ°ããã¾ããã§ããã¢ãã¡ã¼ã·ã§ã³è³æã¯ä½ããªãã®ã§ã代ããã«ã¹ã´ãã¯ã使ã£ãããªã¼ãããã³éã³ããç´¹ä»ãã¾ããããã£ã¦ã¿ã¦ãã ããã
ã¢ã«ãã¡ãããã A = {a, b, c} ãªããã¨ã³ããã¼ã«ã¼è¨å·ãä»ãå ã㦠{a, b, c, $} ãå ¥åè¨å·ã®éåã§ãããã®å ´åã¯ãåé¢ä½ï¼ä¸è§éï¼ã®ãµã¤ã³ãã使ããåé¢ã« a, b, c, $ ãæ¸ãè¾¼ãã§ããã¾ãã
ç´ã«æåã°ã©ããæãã¾ãã辺ã«ã¯ãa, b, c ã®ã©ãã«ãä»ãã¾ããã©ãã«ããªã辺ï¼ã¤ãã·ãã³è¾ºï¼ãå ¥ãã¦ããã¦ãããã§ããã¹ã¿ã¼ããã¼ãï¼å§ç¶æ ï¼ã¨ã´ã¼ã«ãã¼ãï¼çµç¶æ ï¼ã決ãã¦ããã¦ãã ãããã
ãã¦ãã²ã¼ã éå§ã§ããã¹ã¿ã¼ããã¼ãã«ã³ããç½®ãã¦ããµã¤ã³ããæ¯ãã¾ããåºãç®ã«ãã移åå ã決ãã¾ããããã¯ãã©ãã¯ã許ãããã®ã§ãã³ãã移åããçµè·¯ã¯è²ãå¡ãã¨ãå¥ç´ã«è¨é²ããã¨ããã¦å¾ããåããããã«ãã¦ãã ãããã©ãã«ããªã辺ã«æ²¿ã£ã移åã¯ãµã¤ã³ãã®ç®ã¨ç¡é¢ä¿ã«ãã¤ã§ãã§ãã¾ãã
åºããµã¤ã³ãã®ç®ã¨ä¸è´ããã©ãã«ã®è¾ºããªãã¨ãã¯å¤±æã§ãããããã¯ãã©ãã¯ãå¯è½ãªãæ»ã£ã¦å¥ãªçµè·¯ãé²ããã¨ãã§ãã¾ãã移åã«å¤±æããããã¯ãã©ãã¯ã®ä½å°ããªããªã£ãããããªãã¯å¤±æ ¼ãããµã¤ã³ãã®ç®ã®å±¥æ´ï¼å ¥åã®è¨å·åãã¯æå¦ããã¾ããã³ããã´ã¼ã«ãã¼ãã«ããç¶æ ã§ããµã¤ã³ãæ¯ã£ã¦ã$ããåºãã°æåã§ããããã§ã¨ããããã¾ããããµã¤ã³ãã®ç®ã®å±¥æ´ï¼å ¥åã®è¨å·åãã¯åçããã¾ãã
ãã«ãã«ããï¼ ãããªãã¨è¨ã£ã¦æãåãããªãã¨ãã¤ã¾ã§ãã£ã¦ãå®æã¨ãã¦ç解ã§ããªãã¨æãã¾ããã
ã³ãããããã使ãã¹ã´ãã¯ã¨ä¸¦åå¦ç
ãã°ãããªã¼ãããã³ã»ã¹ã´ãã¯ã§éãã§ããã¨ãããã¯ãã©ãã¯ã«ããã¤ãã¤ãããç´ãã®ãé¢åã«ãªãã¾ãããã£ã¨ããæ¹æ³ããªãã§ããããï¼ ã³ãããããã使ã£ã¦ãæåãããã¹ã¦ã®å¯è½æ§ãæ¼ããã¦ããã¦ã¯ã©ãã§ãããã
ä¾ãã°ããµã¤ã³ããæ¯ã£ã¦ãaããåºã¦ããaãã«ããé²ããéã2æ¬ãã£ãã¨ããã³ãã1ã¤å¢ããã¦2ç®æã«ã³ããç½®ãã¾ããåæã«è¤æ°ã®ã³ãã管çãããã¨ã«ãªãã¾ãããå¾æ»ãããé¢åã¯é¿ãããã¾ããã©ãã1åã®ã³ããã´ã¼ã«ãã¼ãã«ããã¨ãã«ã$ããåºãã°ã¢ã¬ãªã§ããéã«ãã$ããåºãã¨ããã´ã¼ã«ãã¼ãã«ããèªåã®ã³ãããªããªãå¤±æ ¼ã§ãã
1ã¤ã®ã¹ã´ãã¯ç¤ã®ä¸ãè¤æ°ã®ã³ããåæã«åãåãç¶æ³ã¯ã並åå¦çã®ç°¡åãªä¾ã«ãªã£ã¦ãã¾ãããããããç¬ç«ãªç¶æ ãæã¤è¤æ°ã®ããã»ããµã«å ¥åï¼ãµã¤ã³ãã®ç®ï¼ãã³ãã¼ãããã·ã¹ãã ã§ãããå®è¡ä¸ã«ããã»ããµã®æ°ãå¢ããã®ã§ãç¶æ 空éã®å ¨ä½ï¼ããã»ããµãã¨ã®ç¶æ 空éã®ç´ç©ï¼ãã©ãã©ã大ãããªãã¾ã -- 失æããçµè·¯ã«å¯¾å¿ããããã»ããµã¯åæ¢ç ´æ£ãã¦ãããããã¢ã¯ãã£ããªããã»ããµãæ¸ããã¨ããããã©ã
é決å®æ§ãªã¼ãããã³ã¨æ±ºå®æ§ãªã¼ãããã³
ããã¯ãã©ãã¯ãå èªã¿ã並åå¦çãªã©ãå¿ è¦ã«ãªãã®ã¯ãå ¥åã«å¯¾ããç¶æ é·ç§»ã®è¡ãå ãä¸æçã«æ±ºã¾ããªãããã§ãããã®ãããªç¶æ é·ç§»ã®ä¸å®æ§ãæã£ããªã¼ãããã³ãé決å®æ§ãªã¼ãããã³ï¼nondeterministic automatonï¼ã¨å¼ã³ã¾ããä¸æ¹ãã©ã®ç¶æ ç¹ï¼æåã°ã©ãã®ãã¼ãï¼ã«ããã¦ããç¶æ é·ç§»ã失æããããç¶æ é·ç§»å ã1åã ãã«æ±ºã¾ãã¨ãããã®ãªã¼ãããã³ã決å®æ§ãªã¼ãããã³ï¼deterministic automatonï¼ã¨è¨ãã¾ãã
ãªã¼ãããã³ãããã°ã©ã ã«ããå®è£ ããã¨ãã¯ã決å®æ§ãªã¼ãããã³ã®ã»ããç°¡åã ãé«éã§æå©ãªãã§ãããçè«ä¸ã¯é決å®æ§ãªã¼ãããã³ã®ã»ããæ±ããããã®ã§ãããã®ã決å®æ§ï¼é決å®æ§ã®ã®ã£ãããã§åè¦å «è¦ãããã¨ã«ãªãã¾ããããã®è©±ã¯ä»æ¥ã¯ãã¾ããã
æ£è¦è¡¨ç¾ã¨ãªã¼ãããã³
æ£è¦è¡¨ç¾Eããæ§æå³ãçµç±ãã¦æéç¶æ ãªã¼ãããã³Mãä½ãã¾ãããããè¨å·åãæ£è¦è¡¨ç¾Eã«ããããããã¨ã¨ããã®è¨å·åãæéç¶æ ãªã¼ãããã³Mã«åçããããã¨ã¯åå¤ã§ããæéç¶æ ãªã¼ãããã³ãå ã«ä¸ããããã¨ããããã¨åçãªæ£è¦è¡¨ç¾ãä½ããã¨ãã§ãã¾ããããä¸è¬ã«ã次ã®ãããªæ¹æ³ã§å®ç¾©ãããè¨èªï¼è¨å·åã®éåï¼ã¯åã種å¥ã®ãã®ã§ãæ£è¦è¨èªï¼regular languageï¼ã¨å¼ã°ãã¾ãã
- å³ç·å½¢ææ³
- å·¦ç·å½¢ææ³
- æ¡å¼µBNFè¨æ³
- æ£è¦è¡¨ç¾
- æéç¶æ ãªã¼ãããã³
ä»ã«ãã¯ãªã¼ãï¼ã¯ãªã¼ãï¼ä»£æ°ãåè«ã使ã£ãå®å¼åãããã¾ãããã©ã¯ã¿ã«å¹¾ä½ãé¢æ£åå¦ç³»ã«ãæ£è¦è¨èªããã®æ¡å¼µã§ããæèèªç±è¨èªãåºç¾ãã¾ãã詳細ã¯å½¢å¼è¨èªã®æç§æ¸ãçºãã¦ãã ããã
ãã®è¨äºã§ã¯ãæé»ã«ãªã¼ãããã³ã®ã¢ã«ãã¡ãããã¨ç¶æ 空éã¯æéã ã¨ä»®å®ãã¦ãã¾ãããç¡éã¢ã«ãã¡ãããï¼ç¡éç¶æ 空éãèãããã¨ã¯éè¦ã§ããç¾å®ã®ã³ã³ãã¥ã¼ã¿ã®ã¢ã«ãã¡ããããç¶æ 空éã¯æéã§ããããã¾ãã«ã巨大ãªæéãªã®ã§ãç¡éã§è¿ä¼¼ããã»ããæ±ãããããªãã¾ãããã£ã¦ãã³ã³ãã¥ã¼ã¿ã¨ã½ããã¦ã§ã¢ã®ã¢ãã«ã«ç¡éãªã¼ãããã³ã使ããã¨ãããã¾ãã
ä»ã®æç®ãèªãã¨ãã®æ³¨æ
ãä¸éã§ããç¥ããã¦ããï¼ä½¿ããã¦ããæ¦å¿µã»æ¹æ³ã«ã¯ãã ããããã®æ¹éã§ãã®è¨äºãæ¸ããã®ã§ãæå¾ã«ä¸è¬çãªæ¦å¿µã»æ¹æ³ã¨ã®éãã注æãã¦ããã¾ãã
æ§æå³ã®ç«¯ç¹ã«é»è·ãä¸ãããã¨ã¯ãã»ã¨ãã©åä¾ããªãããç¥ãã¾ãããé»è·ã¨é»æµï¼é»åã®æµãï¼ãèããã¨ã2ã¤ã®æ§æå³ãé£æ¥ã§ç¹ãã¨ããåè·¯ã®ç´åçµåã¨ã®é¡ä¼¼ãæç«ãã¾ããé¸æã¯åè·¯ã®ä¸¦åçµåã§ãããæ§æå³ãåè«çã«èããã¨ãã¯ãã³ã³ãã¯ãéåã使ãã®ãä¸çªãµããããã¨æãã®ã§ããããã®ã¨ããé»è·ãé»æµãæ¬è³ªçã«å©ç¨ãã¾ãã
æ£è¦è¡¨ç¾ããæ§æå³ãçµç±ãã¦ä½ã£ããªã¼ãããã³ã¯ãå§ç¶æ ç¹ãçµç¶æ ç¹ã1åã§ãããä¸è¬ã«ã¯ãªã¼ãããã³ã®çµç¶æ ç¹ã¯ãããããã£ã¦ãããã®ã§ããæ£è¦è¡¨ç¾ãããªã¼ãããã³ãä½ãæ¹æ³ã¯ããã¯ãã¼ãã³ã»å±±ç°*8ï¼McNaughton-Yamadaï¼ãã°ã©ã·ã¥ã³ãï¼Glushkovï¼ãªã©ã®æ§ææ³ãå¤ãããç¥ããã¦ãã¾ãããããã®æ§ææ³ã§ã¯ãçµç¶æ ç¹ãè¤æ°åç¾ãããã¨ãããã¾ãã
ãã®è¨äºã§ã¯ãã¨ã³ããã¼ã«ã¼è¨å·ã$ããå°å ¥ãã¦ããçµç¶æ ç¹ã«ããã¨ãã«$ãå ¥åãããåçãã¨å®ç¾©ãã¾ãããæ®éã¯ãã¨ã³ããã¼ã«ã¼è¨å·ã¯å°å ¥ããã«ããæå¾ã®å ¥åã«ããçµç¶æ ç¹ã«é·ç§»ãããåçãã¨å®ç¾©ãã¾ããã»ã¨ãã©å·®ã¯ãªãã®ã§ãããæ示çãªã¨ã³ããã¼ã«ã¼ããã£ãã»ããåã¯åãããããæãã¾ã*9ã
[追è¨]ãã®è¨äºã®å 容ã«å¯¾ããå ·ä½ä¾ã¯ããæ£è¦è¡¨ç¾ã¨ãªã¼ãããã³ï¼ãªãã ç°¡åããããJavaScriptã«ããå®è£ ãã«ããã¾ãã[/追è¨]
*1:æ§æçãªæ¼ç®åè¨å·ããã¡ã¿è¨å·ãã¡ã¿æåã¨å¼ã¶ãã¨ãããã¾ãã
*2:ã¢ã«ãã¡ãããã¯Î£ã§è¡¨ããã¨ãå¤ãã®ã§ãããããã§ã¯è±åã使ãã¾ãã
*3:å®ã¯ãåè«ã¨ã®ç¸æ§ãé常ã«è¯ãã®ã§ãããã¬ã¼ã¹ä»ãã¢ãã¤ãåãã³ã³ãã¯ãéåã«ããå®å¼åã¾ã§ããã®æãæ¹ããã®ã¾ã¾ä½¿ãç¶ãããã¨ãã§ãã¾ãã
*4:åºæ¬è¨å·ã«ãã¤ãã¹è¨å·ããã©ã¹è¨å·ãå ¥ã£ã¦ããã¨ãã«å°ãã¾ãããã¦ã¼ã³ãè²å¡ãã¨ããã¼ãã®å½¢ãå¤ããã¨ããã¦å¯¾å¦ãã¦ãã ãããªã
*5:çç¥å¯è½ã¯ç¸è·³ã³ã§ãç¹°ãè¿ãã¯ã´ã«ãã¨è¦ãããããããã
*6:a|b)*, a) ã¯ãããªãã¾ãã
ããå°ãä½è£ãæã£ãã¬ã¤ã¢ã¦ãã«ããã»ããè¦ãããã§ãããä¾ãã°æ¬¡ã®ããã«ãï¼[追è¨]ã¢ãªããç¢å°ãä¸ç®æééã£ã¦ãããã´ã¡ã³ãã§ãç´ããªãã[/追è¨]ï¼
ã¬ã¤ã¢ã¦ããå¤æ´ããï¼ã¤ãªããå
·åã¯å¤æ´ããªãï¼ï¼ã¨ãã¯ãè¨å·ãã¼ããæããªãã¯ã¤ã¤ã¼ã使ãã¾ãããã®ãããªåãªãã¯ã¤ã¤ã¼ããè¨å·çã«ã¯Îµï¼ã¤ãã·ãã³ï¼ã¨ãIï¼å¤§æåã¢ã¤ï¼ã§ç¤ºãã¾ã((空åãã¢ãã¤ãã®åä½å
ãã¾ãã¯åã®æçã¨èããã¨ãã¯ãã1ã«ä¼¼ãIãããµããããã§ãããã
*7:æ£ç¢ºã«è¨ãã°ã空åã ããããªãè¨èªããè¨èªã®é£æ¥æ¼ç®ã®åä½ã«ãªã£ã¦ããã£ã¦ãã¨ã§ãã
*8:å±±ç°å°åï¼ãã¾ã ã»ã²ããï¼æ°ã2008å¹´5æ18æ¥ãéå»
*9:while ((c = getchar()) != EOF) ãªãã¦ã¤ãã£ãªã ãæã¿ä»ãã¦ããããã§ãããã