Next: Start State Example, Previous: Start State Notes, Up: Start States [Contents][Index]
Flex 2.5¤Ç¤Ï¡¢ °Ê²¼¤Î¿·µ¡Ç½¤òÍøÍѤ¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¥¹¥¿¡¼¥È¾õÂÖ‘<*>’¤Ë¤ÏÆÃ¼ì¤Ê°ÕÌ£¤¬¤¢¤ê¡¢ ¤¹¤Ù¤Æ¤Î¥¹¥¿¡¼¥È¾õÂ֤˥ޥåÁ¤·¤Þ¤¹¡£
Î㤨¤Ð¡¢
%x state1 %% <state1>"one" printf("two"); <*>"three" printf("four");
¤Ï¡¢
%s state1 %% <state1>"one" printf("two"); "three" printf("four");
¤ÈƱ¤¸°ÕÌ£¤Ë¤Ê¤ê¤Þ¤¹¡£
¥Þ¥¯¥íYY_START
¤Ë¤è¤ê¡¢
¥«¥ì¥ó¥È¤Ê¥¹¥¿¡¼¥È¾õÂÖ¤ò»²¾È¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
Á°Àá¡ÊStart State Notes¡Ë¤Î¡Ö¥¹¥¿¡¼¥È¾õÂÖ¤Î̾Á°¡×¤Ë¼¨¤·¤¿Îã¤Ç¤Ï¡¢
¥«¥ì¥ó¥È¤Ê¥¹¥¿¡¼¥È¾õÂÖ¤òÇÛÎólast_state
¤Ë³ÊǼ¤¹¤ë½èÍý¤ò¡¢
°Ê²¼¤Î¤è¤¦¤Ëµ½Ò¤·¤Æ¤¤¤Þ¤¹¤¬¡¢
FOO { last_state[state_count] = FOO; … }
¤³¤ÎÂåÆþ¤Ï¡¢
last_state[state_count] = YY_START;
¤Î¤è¤¦¤Ë½ñ¤´¹¤¨¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
Lex¤È¤Î¸ß´¹À¤Î¤¿¤á¤Ë¡¢
YYSTATE
¤¬¡¢
YY_START
¤ÎÊÌ̾¤È¤·¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¥¹¥¿¡¼¥È¾õÂ֤Υ¹¥³¡¼¥×¤òÄêµÁ¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ ¤³¤ì¤Ë¤è¤ê¡¢ Ʊ¤¸¥¹¥¿¡¼¥È¾õÂ֤ˤª¤¤¤ÆÊ£¿ô¤Î¥ë¡¼¥ë¤¬Â¸ºß¤¹¤ë»þ¤Ë¡¢ ¤½¤Î¸Ä¡¹¤Î¥ë¡¼¥ë¤Ë¥¹¥¿¡¼¥È¾õÂÖ¤ò»ØÄꤹ¤ëɬÍפ¬¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£
¥¹¥¿¡¼¥È¾õÂ֤Υ¹¥³¡¼¥×¤Î·Á¼°¤Ï¡¢ °Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹¡£
<start_states>{ … }
¤³¤³¤Ç¡¢ start_states¤Ï¡¢ ñ°ì¤Î¥¹¥¿¡¼¥È¾õÂÖ¡¢ ¤Þ¤¿¤Ï¡¢ ¥«¥ó¥Þ¤Ç¶èÀÚ¤é¤ì¤¿¥¹¥¿¡¼¥È¾õÂ֤Υꥹ¥È¤Ç¤¹¡£ ¥¹¥¿¡¼¥È¾õÂ֤Υ¹¥³¡¼¥×¤Î¶³¦¤Ï¡¢ ‘{’¤È‘}’¤Ë¤è¤Ã¤Æ»ØÄꤵ¤ì¤Þ¤¹¡£ ¥¹¥¿¡¼¥È¾õÂ֤Υ¹¥³¡¼¥×¤òÆþ¤ì»Ò¤Ë¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£
Activating States¤Ë¼¨¤·¤¿Îã¤ò¡¢ ¥¹¥¿¡¼¥È¾õÂ֤Υ¹¥³¡¼¥×¤ò»È¤Ã¤Æ½ñ¤Ä¾¤¹¤È¡¢ °Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
%x COMMENT %% "{" BEGIN(COMMENT); <COMMENT>{ "$R" "$I" "$M" … "}" BEGIN(INITIAL); }
¥¹¥¥ã¥ÊÄêµÁ¥Õ¥¡¥¤¥ë¤Ç‘%option stack’¤ò»ØÄꤹ¤ë¤È¡¢ ¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤òÍøÍѤǤ¤Þ¤¹¡£ ¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤òÁàºî¤¹¤ë¤¿¤á¤Ë¡¢ °Ê²¼¤Î´Ø¿ô¤¬Ä󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£
void yy_push_state(int new_state)
¥«¥ì¥ó¥È¤Ê¥¹¥¿¡¼¥È¾õÂÖ¤ò¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤Ë¥×¥Ã¥·¥å¤·¡¢ new_state¾õÂÖ¤ËÁ«°Ü¤·¤Þ¤¹¡£
void yy_pop_state()
¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤«¤é¥¹¥¿¡¼¥È¾õÂÖ¤ò¥Ý¥Ã¥×¤·¡¢ ¤½¤Î¥Ý¥Ã¥×¤µ¤ì¤¿¥¹¥¿¡¼¥È¾õÂÖ¤ËÁ«°Ü¤·¤Þ¤¹¡£
int yy_top_state()
¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤ÎÀèÆ¬¤Ë¤¢¤ë¥¹¥¿¡¼¥È¾õÂÖ¤òÊÖ¤·¤Þ¤¹ ¡Ê¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤ÎÆâÍÆ¤ÏÊѹ¹¤µ¤ì¤Þ¤»¤ó¡Ë¡£
Á°Àá¡ÊStart State Notes¡Ë¤Î¡Ö¥¹¥¿¡¼¥È¾õÂÖ¤Î̾Á°¡×¤Ë¼¨¤·¤¿Îã¤ò¡¢ ¥¹¥¿¡¼¥È¾õÂÖ¥¹¥¿¥Ã¥¯¤ò»È¤Ã¤Æ½ñ¤Ä¾¤¹¤È°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
%option stack %x FOO BAR baz %% FOO { yy_push_state(baz); }
BAR { yy_push_state(baz); }
<baz>rule 1 … <baz>rule n <baz>END { yy_pop_state(); }