ã‚ãªãŸã¯è¬Žã®ãƒ—ãƒã‚°ãƒ©ãƒ ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’見ã¤ã‘ãŸï¼Ž
ã•ã£ããコンパイルã—ã¦å®Ÿè¡Œã—ã¦ã¿ãŸãŒï¼Œã„ã¤ã¾ã§å¾…ã£ã¦ã‚‚処ç†ãŒçµ‚ã‚らãªã„.
ã©ã†ã‚„ら,プãƒã‚°ãƒ©ãƒ ãŒç„¡é™ãƒ«ãƒ¼ãƒ—ã—ã¦ã—ã¾ã£ã¦ã„るよã†ã§ã‚る.
ソースコードを詳ã—ã見ã¦ã¿ãŸã¨ã“ã‚,以下ã®ã‚ˆã†ãªã“ã¨ãŒã‚ã‹ã£ãŸï¼Ž
ソースコード㯠N è¡Œã‹ã‚‰ãªã‚Šï¼Œå„è¡Œã¯ãƒ©ãƒ™ãƒ«æ–‡ã‹ goto æ–‡ã®ã„ãšã‚Œã‹ã§ã‚る.
ラベル文㨠goto æ–‡ã¯ãã‚Œãžã‚Œæ¬¡ã®ã‚ˆã†ãªãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã«å¾“ã£ã¦ã„る.
LABEL:
goto LABEL;
ã“ã“ã§ï¼ŒLABEL ã¯ãƒ©ãƒ™ãƒ«ã‚’表ã™æ–‡å—列ã§ã‚る.
プãƒã‚°ãƒ©ãƒ ã¯å…ˆé ã®è¡Œã‹ã‚‰é †ç•ªã« 1 è¡Œãšã¤å‡¦ç†ã•ã‚Œã‚‹ï¼Ž
ラベル文㨠goto 文を処ç†ã—ãŸã¨ãã®æŒ™å‹•ã¯æ¬¡ã®ã¨ãŠã‚Šï¼š
最後ã®è¡Œã‚’処ç†ã—終ãˆã¦æ¬¡ã«å‡¦ç†ã™ã‚‹è¡ŒãŒãªããªã£ãŸã¨ã,プãƒã‚°ãƒ©ãƒ ã¯çµ‚了ã™ã‚‹ï¼Ž
ã‚ãªãŸã¯ï¼Œã„ãã¤ã‹ã® goto 文を削除ã™ã‚‹ã“ã¨ã§ãƒ—ãƒã‚°ãƒ©ãƒ ã‚’æ£ã—ã終了ã•ã›ãŸã„ã¨æ€ã£ã¦ã„る.
一方ã§ï¼Œæ‰‹ã‚’åŠ ãˆã‚‹ç®‡æ‰€ã¯ã§ãã‚‹ã ã‘å°‘ãªãã—ãŸã„.
プãƒã‚°ãƒ©ãƒ を終了ã•ã›ã‚‹ãŸã‚ã«ã¯æœ€å°ã§ã„ãã¤ã® goto 文を消ã›ã°ã„ã„ã ã‚ã†ã‹ï¼Ž
N s_1 . . . s_N
s_i ã¯æ¬¡ã®äºŒã¤ã®ã†ã¡ã®ã„ãšã‚Œã‹ã§ã‚る.
LABEL_i: goto LABEL_i;
削除ã™ã¹ã goto æ–‡ã®æœ€å°å€‹æ•°ã‚’ 1 è¡Œã«å‡ºåŠ›ã›ã‚ˆï¼Ž
2 LOOP: goto LOOP;
1
8 goto there; loop: goto loop; here: goto goal; there: goto here; goal:
0
1 GOTO:
0