¼Ò¼³°°ÀºÀÚ¹Ù2ºÎ  Á¦9Àå ÀÚ¹Ù½ºÆ®¸²  9.3.6 StreamTonkenizer  

 

9.3.6 StreamTonkenizer

 

ÆÄÀÏ¿¡¼­ µ¥ÀÌÅ͸¦ ÀÐÀ» ¶§ °¢ Ç׸ñ, Áï ÅäÅ« ´ÜÀ§·Î ³ª´©¾î Àеµ·Ï ÇØÁִ Ŭ·¡½º°¡ StreamTokenizerŬ·¡½ºÀÔ´Ï´Ù. StreamTokenizerŬ·¡½º´Â ÀÔ·Â ½ºÆ®¸², ¶Ç´Â ¹®ÀÚ ½ºÆ®¸²¿¡¼­ ½ºÆ®¸²À» ÀÔ·Â¹Þ¾Æ ÅäÅ« ´ÜÀ§·Î ³ª´©¾î ÁÖ¸ç, ÀÌ·¸°Ô ³ª´©¾î ³õÀº ÅäÅ«À» ÇѲ¨¹ø¿¡ ÀÐÀ» ¼ö ÀÖµµ·Ï ÇØ ÁÝ´Ï´Ù. ÀÌ StreamTokenizerŬ·¡½º¸¦ »ç¿ëÇϸé ID, ¼ýÀÚ, ¹®ÀÚ¿­, ÁÖ¼® µî ´Ù¾çÇÑ ÇüÅÂÀÇ ÅäÅ«µéÀ» ÀÐÀ» ¼ö ÀÖ½À´Ï´Ù. StreamTokenizerŬ·¡½ºÀÇ ÀϹÝÀûÀÎ »ç¿ë ÀýÂ÷´Â ´ÙÀ½°ú °°½À´Ï´Ù.

 

¢Ñ ÅäÅ«(token)?

½ºÆäÀ̽º, Åǹ®ÀÚ³ª ¡°, ; :¡±µî ÁöÁ¤µÈ °æ°èÀÚ·Î ³ª´µ¾î¼­ ºÐ¸®µÇ¾îÁø  streamÀ» ¸»ÇÑ´Ù.

¿¹¸¦ µé¾î ½ºÆ®¸²ÀÌ 111:222:333 À̰í À̰ÍÀÌ °æ°èÀÚ ¡®:¡¯¿¡ ÀÇÇÏ¿© tokenizeµÇ¾ú´Ù¸é, 111, 222, 333ÀÌ °¢°¢ ÇϳªÀÇ ÅäÅ«ÀÎ °ÍÀÌ´Ù.

 

1.        Reader°³Ã¼¸¦ À§ÇÑ StreamTokenizer°³Ã¼¸¦ ¸¸µì´Ï´Ù.

2.        ¹®ÀÚ¸¦ ó¸®ÇÏ´Â ¹æ¹ýÀ» Á¤ÀÇÇÕ´Ï´Ù.

3.        nextToken()¸Þ¼­µå¸¦ È£ÃâÇÏ¿© ´ÙÀ½ ÅäÅ«À» °¡Á®¿É´Ï´Ù.

4.        ttype ÀνºÅϽº º¯¼ö¸¦ Àоî ÅäÅ« Çü½ÄÀ» °áÁ¤ÇÕ´Ï´Ù.

5.        sval, nval ¶Ç´Â ttype ÀνºÅϽº º¯¼ö¿¡¼­ ÅäÅ« °ªÀ» ÀнÀ´Ï´Ù.

6.        ÅäÅ«À» ó¸®ÇÕ´Ï´Ù.

7.        nextToken()¸Þ¼­µå°¡ StreamTokenizer.TT_EOF¸¦ ¹ÝȯÇÒ ¶§±îÁö ´Ü°è 3ºÎÅÍ ´Ü°è 6±îÁöÀÇ °úÁ¤À» ¹Ýº¹ÇÕ´Ï´Ù

 

À̹ø¿¡´Â À§¿¡¼­ ¼³¸íÇÑ StreamTokenizerŬ·¡½ºÀÇ ÀϹÝÀûÀÎ »ç¿ë ÀýÂ÷¿¡ ¸ÂÃç ÅØ½ºÆ® ÆÄÀÏ¿¡ µé¾î ÀÖ´Â ¹®ÀÚµéÀ» ÅäÅ«À¸·Î ³ª´©¾î Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇØ º¸°Ú½À´Ï´Ù. Àú´Â ¡®¾ß µÈ´Ù!!ȣȣȣ~~53¡¯ À̶ó´Â ¹®ÀåÀÌ µé¾î ÀÖ´Â ¡°StreamTonkenizerTest.txt¡±ÆÄÀÏÀ» ¸¸µé¾î ½ÃÇèÇØ º¸¾Ò½À´Ï´Ù. ¿©·¯ºÐµµ ¿©·¯°¡Áö ¹®ÀåºÎÈ£¸¦ ³Ö¾î¼­ ½ÃÇèÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.

 

StreamTokenizerTest.java (StreamTokenizerÀ» Å×½ºÆ®ÇÑ ¿¹Á¦)

import java.io.*;

public class StreamTokenizerTest {

   public static void main(String[] args) throws IOException {

       InputStreamReader reader = new InputStreamReader(new FileInputStream("StreamTokenizerTest.txt"));

       StreamTokenizer tokens = new StreamTokenizer(reader);

       tokens.quoteChar('"');

       while(tokens.nextToken()!= tokens.TT_EOF) {

          switch(tokens.ttype) {

             case '"':

                System.out.println(tokens.sval);

             break;

             case StreamTokenizer.TT_WORD:

                System.out.println(tokens.sval);

             break;

             case StreamTokenizer.TT_NUMBER:

                System.out.println(tokens.nval);

             break;

          }

       }

   }

}

C:\JavaExample\09>javac StreamTokenizerTest.java

C:\JavaExample\09>java StreamTokenizerTest

¾ß

µÈ´Ù

ȣȣȣ

53.0

 

¿¹Á¦¸¦ µ¹·Áº¸½Ã¸é ¡®StreamTonkenizerTest.txt¡¯ÆÄÀÏ¿¡ µé¾îÀÖ´Â ¹®ÀÚµéÀÌ ¹®ÀÚ¿­·Î ºÐ¸®µÇ¾î Ãâ·ÂµÇ´Â °ÍÀ» º¸½Ç ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ÀÚ ±×·³, ¿¹Á¦¸¦ ÀÚ¼¼È÷ µé¿©´Ù º¸°Ú½À´Ï´Ù.

 

InputStreamReader¸¦ ÅëÇØ ÀÐ¾î µéÀÎ ¡®StreamTonkenizerTest.txt¡¯ÆÄÀÏÀÇ ³»¿ëµéÀ» ÅäÅ«À¸·Î ºÐ¸®Çϱâ À§ÇØ tokens°´Ã¼¸¦ »ý¼ºÇÏ¿´½À´Ï´Ù.

 

n        StreamTokenizer tokens = new StreamTokenizer(reader);

 

quoteChar()¸Þ¼­µå´Â ¹®ÀÚ°¡ ÀÏÄ¡ÇÏ´Â TokenizerÀÇ ¹®ÀÚ¿­ »ó¼ö¸¦ ºÐ¸®Çϵµ·Ï ÁöÁ¤ÇÕ´Ï´Ù. À̶§ quoteChar()¸Þ¼­µå µÚ¿¡ nextToken()¸Þ¼­µå°¡ ¹®ÀÚ¿­ »ó¼ö¸¦ ¹ß°ßÇÏ´Â °æ¿ì, ttypeÇʵå´Â ¹®ÀÚ¿­ ºÐ¸®ÀÚ·Î ¼³Á¤µÇ°í svalÇʵå´Â ¹®ÀÚ¿­ º»¹®À¸·Î ¼³Á¤µË´Ï´Ù. ¹®ÀÚ¿­ ÀÎ¿ë ±âÈ£°¡ ¹ß°ßµÇ¸é, ¹®ÀÚ¿­ ÀÎ¿ë ±âÈ£(ÀÌ ¹®ÀÚ´Â Æ÷ÇÔÇÏÁö ¾ÊÀ½) ´ÙÀ½¿¡¼­ ´ÙÀ½ ¹®ÀÚ¿­ ÀÎ¿ë ±âÈ£°¡ ³ªÅ¸³ª´Â °÷±îÁö(ÀÎ¿ë ±âÈ£´Â Æ÷ÇÔÇÏÁö ¾ÊÀ½) ¶Ç´Â, Çà Á¾·á ±âÈ£³ª ÆÄÀÏÀÇ ³¡¿¡ À̸£±â±îÁöÀÇ ¸ðµç ¹®ÀÚ·Î ±¸¼ºµÇ´Â ¹®ÀÚ¿­ÀÌ Àνĵ˴ϴÙ. ¹®ÀÚ¿­ ºÐ¼®½Ã "\n" ¹× "\t"¿Í °°Àº º¸Åë À̽ºÄÉÀÌÇÁ ¼ø¼­°¡ ÀÎ½ÄµÇ¾î ´ÜÀÏ ¹®ÀÚ·Î º¯È¯µË´Ï´Ù.

 

ÀÎ¿ë ±âÈ£ ¾ÈÀÇ ¹®ÀÚ¿­À» Ãâ·ÂÇÕ´Ï´Ù.

 

n        while(tokens.nextToken()!= tokens.TT_EOF) {

n           switch(tokens.ttype) {

n              case '"':

n                 System.out.println(tokens.sval);

n              break;

n              case StreamTokenizer.TT_WORD:

n                 System.out.println(tokens.sval);

n              break;

n              case StreamTokenizer.TT_NUMBER:

n                 System.out.println(tokens.nval);

n              break;

n           }

n        }

 

ÅäÅ«ÀÌ ½ºÆ®¸²ÀÇ ³¡±îÁö µµÂøÇÏÁö ¾ÊÀ» ¶§±îÁö °è¼ÓÇØ¼­ InputStreamReader¿¡¼­ ´ÙÀ½ ÅäÅ«À» ºÐ¼®ÇÕ´Ï´Ù.

 

n        while(tokens.nextToken()!= tokens.TT_EOF)

 

StreamTokenizer°¡ ´Ü¾î ÅäÅ«À» ÀоúÀ» ¶§ ±× ¹®ÀÚ¿­À» Ãâ·ÂÇÏ°í ¼ýÀÚ¸¦ ÀоúÀ» ¶§ ±× ¼ýÀÚ°ªÀ» Ãâ·ÂÇÕ´Ï´Ù. À̶§ ÁÖÀÇÇÒ Á¡Àº tokens.TT_WORD°¡ ¾Æ´Ñ StreamTokenizer.TT_WORD·Î Àû¾î¾ß¸¸ " constant expression required" ¶ó´Â ¿¡·¯°¡ ³ªÁö ¾Ê½À´Ï´Ù.

 

n        case StreamTokenizer.TT_WORD:

n           System.out.println(tokens.sval);

n        break;

n        c ase StreamTokenizer.TT_NUMBER:

n           System.out.println(tokens.nval);

n         break;

 

  StreamTokenizerŬ·¡½º´Â String´ë½Å¿¡ InputStream¿¡ µé¾î¿À´Â µ¥ÀÌÅ͸¦ ÅäÅ«´ÜÀ§·Î ³ª´©¾îÁÖ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. StreamTokenizerŬ·¡½º´Â Character¸¦ ±â¹ÝÀ¸·Î Çϱ⠶§¹®¿¡ µÇµµ·ÏÀ̸é Reader°è¿­ÀÇ StreamÀ» ÀԷ¼ҽº·Î »ç¿ëÇÒ °ÍÀ» ±ÇÀåÇÕ´Ï´Ù.

 

StreamTokenizer »ý¼ºÀÚ¸Þ¼­µå

public StreamTokenizer(Reader r) : ÁÖ¾îÁø ¹®ÀÚ ½ºÆ®¸²À» ºÐ¼®ÇÏ´Â ÅäÅ©³ªÀÌÀú¸¦ ÀÛ¼ºÇÕ´Ï´Ù.

 

StreamTokenizer ÁÖ¿ä ¸â¹öº¯¼ö

public static final int TT_EOF : ½ºÆ®¸²ÀÇ ³¡À» ÀоúÀ½À» ³ªÅ¸³»´Â »ó¼öÀÔ´Ï´Ù.

public static final int TT_EOL : ÇàÀÇ ³¡À» ÀоúÀ½À» ³ªÅ¸³»´Â »ó¼öÀÔ´Ï´Ù.

public static final int TT_NUMBER : ¼ýÀÚ ÅäÅ«À» ÀоúÀ½À» ³ªÅ¸³»´Â »ó¼öÀÔ´Ï´Ù.

public static final int TT_WORD : ´Ü¾î ÅäÅ«À» ÀоúÀ½À» ³ªÅ¸³»´Â »ó¼öÀÔ´Ï´Ù.

public String sval : ÇöÀç ÅäÅ«ÀÌ ´Ü¾î ÅäÅ«À̸é ÀÌ Çʵ忡´Â ´Ü¾î ÅäÅ«ÀÇ ¹®ÀÚ¸¦ Á¦°øÇÏ´Â ¹®ÀÚ¿­ÀÌ µé¾î ÀÖ½À´Ï´Ù. ÇöÀç ÅäÅ«ÀÌ ÀοëµÈ ¹®ÀÚ¿­ ÅäÅ«À̸é ÀÌ Çʵ忡´Â ¹®ÀÚ¿­ º»¹®ÀÌ µé¾î ÀÖ½À´Ï´Ù. ÇöÀç ÅäÅ«Àº ttype Çʵ尡 TT_WORDÀÎ °æ¿ì ÇϳªÀÇ ´Ü¾îÀÔ´Ï´Ù. ÇöÀç ÅäÅ«Àº ttype Çʵ尪ÀÌ ÀÎ¿ë ¹®ÀÚÀÎ °æ¿ì ÇϳªÀÇ ÀοëµÈ ¹®ÀÚ¿­ ÅäÅ«ÀÔ´Ï´Ù.

public double nval : ÇöÀç ÅäÅ«ÀÌ ¼ýÀÚÀ̸é ÀÌ Çʵ忡´Â ÇØ´ç ¼ýÀÚ°ªÀÌ µé¾î ÀÖ½À´Ï´Ù. ÇöÀç ÅäÅ«Àº ttype Çʵ尪ÀÌ TT_NUMBERÀÎ °æ¿ì ÇϳªÀÇ ¼ýÀÚÀÔ´Ï´Ù.

public int ttype : nextToken ¸Þ¼­µå¸¦ È£ÃâÇÑ ÈÄ, ÀÌ Çʵ忡´Â ¹æ±Ý ÀÐÀº ÅäÅ«ÀÇ À¯ÇüÀÌ µé¾î ÀÖ½À´Ï´Ù. ´ÜÀÏ ¹®ÀÚ ÅäÅ«ÀÇ °æ¿ì, °ªÀº Á¤¼ö·Î º¯È¯µÈ ´ÜÀÏ ¹®ÀÚÀÔ´Ï´Ù. ÀοëµÈ ¹®ÀÚ¿­ ÅäÅ«ÀÇ °æ¿ì, °ªÀº ÀÎ¿ë ¹®ÀÚÀÔ´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ´ÙÀ½ Áß ÇϳªÀÔ´Ï´Ù.

TT_WORD´Â ÅäÅ«ÀÌ ÇÑ ´Ü¾îÀÓÀ» ³ªÅ¸³À´Ï´Ù.

TT_NUMBER´Â ÅäÅ«ÀÌ ÇϳªÀÇ ¼ýÀÚÀÓÀ» ³ªÅ¸³À´Ï´Ù.

TT_EOLÀº ÇàÀÇ ³¡À» ÀоúÀ½À» ³ªÅ¸³À´Ï´Ù. Çʵå´Â eolIsSignificant ¸Þ¼­µå°¡ Àμö true·Î È£ÃâµÇ´Â °æ¿ì¿¡¸¸ ÀÌ °ªÀ» °¡Áú ¼ö ÀÖ½À´Ï´Ù.

TT_EOF´Â ÀÔ·Â ½ºÆ®¸²ÀÇ ³¡¿¡ µµ´ÞÇßÀ½À» ³ªÅ¸³À´Ï´Ù.

 

StreamTokenizer ÁÖ¿ä ¸Þ¼­µå

public int nextToken() throws IOException : TokenizerÀÇ ÀÔ·Â ½ºÆ®¸²¿¡¼­ ´ÙÀ½ ÅäÅ«À» ºÐ¼®Çϴµ¥ ´ÙÀ½ ÅäÅ« À¯ÇüÀÌ ttypeÇʵå·Î ¸®Åϵ˴ϴÙ. ÅäÅ«¿¡ °üÇÑ Ãß°¡ ÆÁÀº TokenizerÀÇ nvalÇÊµå ¶Ç´Â svalÇʵ忡 ³ª¿Í ÀÖ½À´Ï´Ù. ÀÌ Å¬·¡½ºÀÇ ÀÏ¹Ý Å¬¶óÀÌ¾ðÆ®´Â ¸ÕÀú ±¸¹® Å×À̺íÀ» ¼³Á¤ÇÑ ´ÙÀ½ nextTokenÀ» È£ÃâÇÏ´Â ·çÇÁ¿¡ µÎ¾î TT_EOF°¡ ¸®Å쵃 ¶§±îÁö ¿¬¼ÓÀûÀÎ ÅäÅ«À» ºÐ¼®ÇÕ´Ï´Ù.

public void quoteChar(int ch) : ¹®ÀÚÀÇ ÀÏÄ¡ÇÏ´Â ½ÖÀÌ ÅäÅ©³ªÀÌÀúÀÇ ¹®ÀÚ¿­ »ó¼ö¸¦ ºÐ¸®Çϵµ·Ï ÁöÁ¤ÇÕ´Ï´Ù. nextToken¸Þ¼­µå°¡ ¹®ÀÚ¿­ »ó¼ö¸¦ ¹ß°ßÇÏ´Â °æ¿ì, ttypeÇʵå´Â ¹®ÀÚ¿­ ºÐ¸®ÀÚ·Î ¼³Á¤µÇ°í svalÇʵå´Â ¹®ÀÚ¿­ º»¹®À¸·Î ¼³Á¤µË´Ï´Ù.

public void commentChar(int ch) : ¹®ÀÚ Àμö°¡ ´ÜÀÏ Çà ÁÖ¼®À» ½ÃÀÛÇϵµ·Ï ÁöÁ¤ÇÕ´Ï´Ù. ½ºÆ®¸² ÅäÅ©³ªÀÌÀú´Â ÁÖ¼® ¹®ÀÚ¿¡¼­ ÇàÀÇ ³¡¿¡ À̸£±â±îÁö ¸ðµç ¹®ÀÚ¸¦ ¹«½ÃÇÕ´Ï´Ù.

public int lineno() : ÇöÀç Çà ¹øÈ£¸¦ ¸®ÅÏÇÕ´Ï´Ù.

 



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù2ºÎ
ÀúÀÚ:ÃÖ¿µ°ü